Regid Ichira <regi...@yahoo.com> wrote:
>  Within a shell, what is the difference between [ -n undefinedString ] and [ 
> -n "$undefinedString" ] ?
>With bash I get:
>
>    $ unset undefinedString
>    $ [ -n undefinedString ]  &&  printf "$undefinedString" | od -c
>    0000000

You are just testing for the length of "undefinedString" here, which
is a perfectly good string even without the quotation marks. When you
then do printf "$undefinedString", the variable is actually looked
up, found to be undefined and "$undefinedString" evaluates to "".

>    $ [ -n "$undefinedString" ]  &&  printf "$undefinedString" | od -c

Here, the variable is evaluated to "" (as above) and then checked for
nonzeroity. Obviously, that is false.

>    $ [ -z "$undefinedString" ]  &&  printf "$undefinedString" | od -c
>    0000000

Same as above, but checked if the string is empty. Obviously, it is.

>I mean, shouldn't [ -n undefinedString ], which I guess is without shell 
>expansion, give an error?  Clearly
>it is an empty string.

No, it is the string undefinedString, which has 15 letters (if I
didn’t miscount…).

>  I think I am confusing various terms.  An explanation, perhaps by using the 
> concept of C like strings,
>might be helpful.

Bash not only knows numerical constants like C (1, 5, 42) but also
string constants which per se don’t require further mark up, unlike
C. "" is only needed in Bash if there are spaces in the string.

      C        |     Bash
      1        |       1  
  "string"     |    "string"
  "string"     |     string
  "stri ng"    |    "stri ng"
  "stri" "ng"  |    stri ng (two seperate strings)

Best regards,

Claudius   
-- 
The speed of anything depends on the flow of everything.
Please use GPG: ECB0C2C7 4A4C4046 446ADF86 C08112E5 D72CDBA4
http://chubig.net/ http://nightfall.org



--
To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20110917185927.228cd...@ares.home.chubig.net

Reply via email to