您好,我编写了小型Shell脚本,但我无法理解该脚本的行为。谁能帮助我理解该脚本。
脚本:
#!/bin/bash
if [ -z $1 ]
then
echo "fail"
else
echo "success"
fi
执行脚本时。
./test.sh one
即使它传递了参数,它也会输出else语句而不是main语句。
任何人都可以向我解释这种行为以了解
答案 0 :(得分:4)
bash中的-z
测试正在检查字符串是否为空(零长度)值。
由于您要将参数传递给脚本$1
并不为空,因此-z $1
的计算结果为false
,执行脚本的else
部分。
旁注:由于您使用的是字符串,因此我建议您对变量引用如下:
if [ -z "$1" ]; then
echo "String is empty / No argument given"
else
echo "String is not empty / Argument given"
fi
编辑:
正如user1934428所指出的,最好使用[[
代替[
。除其他外,这消除了报价的需要。查看更多差异here。
if [[ -z $1 ]]; then
...
但是,请注意,这是bash扩展名,在sh脚本中不起作用。