Re: if [[ $Something ]] – in what situations does this work?
Robert P. J. Day
rpjday at crashcourse.ca
Sat Feb 18 17:33:44 UTC 2012
On Sat, 18 Feb 2012, franz.reitinger wrote:
> ...
> > just confuse bash scripting with other things, such as C and even
> > Basic:
> > if (x) {
> > dostuff;
> > domorestuff;
> > }
> >
> > or
> >
> > if x then
> > dostuff
> > domorestuff
> > endif
> >
> >
>
> In programming languages like C a return value of 0 means that an
> error has occurred.
> e.g.
> if ( expr ) { // expr <> 0 ==> TRUE
> ...
> } else ...
>
> A script executed within a bash shell works contrariwise;
> e.g.
> if [ expr ]; # you have to check the expression (expr == 0) and this
> evalutes to TRUE/FALSE
>
> Unix based apps return a 0 for success and a value <> 0 is used for
> returning the error code.
> In C (and other programming languages) a return value of 0 evalutes to
> FALSE; all other values evaluate to TRUE
let me throw in a bit of info that might clear up a lot of
confusion. one of the forms of the "if" construct in shell
programming is:
if <some command> ; then
where you're testing the exit code ($?) of some command you're
running. linux commands normally return 0 if they work, and the "if"
construct treats that value as "true". (the above is normally called
a "command test" in shell programming.)
there are four general tests in shell programming:
1) string tests
2) numeric tests
3) file tests
4) command tests
but (and this is important), they are ***all*** just variations of
command tests. ***all*** of them. in every single case, you should
interpret the "if" construct as operating on the result being returned
as if a command had just been run.
this confuses people who look at something like:
if [ $VAR = "rday' ] ; then
and think it's a string comparison. well, ok, it is, but more
fundamentally, it's the *command*
[ $VAR = "rday" ]
being executed, then returning the appropriate value of $?
that '[' thing? it's not just a bracket. it's a command:
$ type [
[ is a shell builtin
$
it is (for the most part) precisely equivalent to forms you might
have seen in older shell programs:
if test $VAR = "rday" ; then
the '[' object is simply another form of the "test" command. is all
this making sense?
one last time -- every usage of "if" in a shell script can be
thought of as a command test.
rday
========================================================================
Robert P. J. Day Ottawa, Ontario, CANADA
http://crashcourse.ca
Twitter: http://twitter.com/rpjday
LinkedIn: http://ca.linkedin.com/in/rpjday
========================================================================
More information about the ubuntu-users
mailing list