shell - Testing against -n option in BASH scripts always returns true -


i writing bash script, in trying check if there particular parameters provided. i've noticed strange (at least me) behavior of [ -n arg ] test. following script:

#!/bin/bash  if [ -n $1 ];     echo "the 1st argument of non 0 length" fi  if [ -z $1 ];     echo "the 1st argument of 0 length" fi 

i getting results follows:

  1. with no parameters:

    xylodev@ubuntu:~$ ./my-bash-script.sh 1st argument of non 0 length 1st argument of 0 length 
  2. with parameters:

    xylodev@ubuntu:~$ ./my-bash-script.sh foobar 1st argument of non 0 length 

i've found out enclosing $1 in double quotes gives me results expected, still wonder why both tests return true when quotes not used , script called no parameters? seems $1 null then, [ -n $1 ] should return false, shouldn't it?

quote it.

if [ -n "$1" ];  

without quotes, if $1 empty, execute [ -n ], true*, , if $1 not empty, it's true.

* if give [ single argument (excluding ]), true. (incidentally, pitfall many new users fall when expect [ 0 ] false). in case, single string -n.


Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -