对BASH脚本中的-n选项进行测试始终返回true

前端之家收集整理的这篇文章主要介绍了对BASH脚本中的-n选项进行测试始终返回true前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个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,不是吗?

引用它.
if [ -n "$1" ]; then

如果没有引号,如果$1为空,则执行[-n],这是真*,如果$1不为空,那么显然是真的.

*如果你给[一个参数(不包括)),它总是如此. (顺便说一句,这是许多新用户在期望[0]为假时)陷入的陷阱.在这种情况下,单个字符串是-n.

猜你在找的Bash相关文章