Bash shell脚本中的命令联机参数
嗨,我写了一个小的shell脚本,我不能理解这个脚本的行为。有谁能帮我理解那个剧本吗 脚本:Bash shell脚本中的命令联机参数,bash,shell,sh,Bash,Shell,Sh,嗨,我写了一个小的shell脚本,我不能理解这个脚本的行为。有谁能帮我理解那个剧本吗 脚本: #!/bin/bash if [ -z $1 ] then echo "fail" else echo "success" fi 在执行脚本时 ./test.sh one 它发出else语句而不是main语句,即使它传递了参数 有人能解释一下这种行为吗?bash中的-z测试正在检查字符串是否为空的零长度值 由于要向脚本传递参数$1不是空的,因此-z$1的计算结果为false,执行脚本的e
#!/bin/bash
if [ -z $1 ]
then
echo "fail"
else
echo "success"
fi
在执行脚本时
./test.sh one
它发出else语句而不是main语句,即使它传递了参数
有人能解释一下这种行为吗?bash中的-z测试正在检查字符串是否为空的零长度值
由于要向脚本传递参数$1不是空的,因此-z$1的计算结果为false,执行脚本的else部分
旁注:由于您使用的是字符串,我建议您引用以下变量:
如果[-z$1];然后
回显字符串为空/未提供参数
其他的
回显字符串不为空/给定了参数
fi
编辑:
正如作者所指出的,使用[[而不是[]可能更好。除其他外,这消除了引用的需要。请参阅更多差异
如果[[-z$1]];则
...
但是,请注意,这是一个bash扩展,在sh脚本中不起作用。请参阅,以获取哪些条件表达式标志执行哪些操作的列表。因此,您的问题是-z是什么意思?如果我回答了您的问题,如果您将其标记为已接受,那将是一件好事。此外,还添加了[command是test命令的同义词。您可以通过查看其手册:man test了解更多有关可用于测试的标志的信息。您将看到-z字符串,字符串的长度为zeroHi Jnevill。感谢您的支持response@confetti:推荐[…]不是更好吗测试的形式?那个么我们就不必关心引用了。@user1934428我已经做了编辑并添加了一些背景信息。