Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash shell脚本中的命令联机参数_Bash_Shell_Sh - Fatal编程技术网

Bash 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

嗨,我写了一个小的shell脚本,我不能理解这个脚本的行为。有谁能帮我理解那个剧本吗

脚本:

#!/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我已经做了编辑并添加了一些背景信息。