strange shell behavior...thoughts?
Cameron Simpson
cs at zip.com.au
Mon Sep 15 06:08:46 UTC 2008
On 14Sep2008 23:50, Kevin Martin <kevintm at ameritech.net> wrote:
| So I'm fairly confused at this point.
|
| Start with a /bin/sh shell.
|
| Then do:
|
| sh-3.2$ unset $?
| sh: unset: `0': not a valid identifier
|
| ok, no problem; then do
|
| sh-3.2$ /bin/ksh -c " set -xv ; grep ABCD b ; echo $? ; if [ "$?" =
| "0" ] ; then echo yes ; fi"
You know you need to escape " inside ", yes? As it happens it has no
effect in your script here, but ...
| + grep ABCD b
| ABCD="C" ; export ABCD
| + echo 1
| 1
| + [ 1 = 0 ]
|
| WHAT?
The "echo" command has a return status, and trashes your $?.
| Then do it again without unsetting $?:
You don't ever unset $?. It is not a meaningful idea.
If you want a particular $?, do this:
grep ABCD b
xit=$?
echo $xit # overwrites $?, but $xit is untouched
if [ $xit = 0 ]
then
...
but almost invariably when someone does:
some_command ...
if [ $? = 0 ]
then
they would be MUCH better off just going:
if some_command ...
then
Remember that the predicate in an if/while if a command_list, and the
exit status of the last command in the command_list is what is tested.
The command "[" (aka "test") is just another command suited to simple
Boolean tests. But it is not "special".
Example:
# repeat prompt until EOF or empty reply
while echo "Enter something:"
read foo && [ -n "$foo" ]
do
echo "foo=$foo"
done
| [...snip...] Is this a ksh bug?
No.
Cheers,
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
The first ninety percent of the task takes ninety percent of the time, and
the last ten percent takes the other ninety percent.
More information about the fedora-list
mailing list