我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到[-n arg]测试的一个奇怪的(至少对我来说)行为.对于以下脚本:
#!/bin/bash if [ -n $1 ]; then echo "The 1st argument is of NON ZERO length" fi if [ -z $1 ]; then echo "The 1st argument is of ZERO length" fi
我得到的结果如下:
>没有参数:
xylodev@ubuntu:~$./my-bash-script.sh The 1st argument is of NON ZERO length The 1st argument is of ZERO length
>带参数:
xylodev@ubuntu:~$./my-bash-script.sh foobar The 1st argument is of NON ZERO length
我已经发现用双引号括起$1可以得到预期的结果,但是我仍然想知道为什么当没有使用引号并且没有参数调用脚本时两个测试都返回true?似乎$1为null,所以[-n $1]应该返回false,不是吗?