对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.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...