加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:33:48 所属栏目:安全 来源:网络整理
导读:我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到[-n arg]测试的一个奇怪的(至少对我来说)行为.对于以下脚本: #!/bin/bashif [ -n $1 ]; then echo "The 1st argument is of NON ZERO length"fiif [ -z $1 ]; then echo "The 1st argum
我正在编写一个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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读