-z
下面代码中的标志是什么意思:
if [ -z $TEST_PARAM ]; then
有这样的标志的列表吗?
对于像这样的标志ls -l
,我知道在哪里可以找到它,但是对于单个标志,我没有得到任何描述它的网站。
答案1
答案2
[
是该实用程序的另一个名称test
。它们之间的唯一区别是最后[
需要一个额外的参数。]
大多数系统都有一个[
手册页,其内容与test
手册页相同。
大多数 shell 都具有内置[
功能test
,因此手册页中描述的确切功能可能与 shell 中实际可用的功能略有不同。-z
不过,这是所有实现中都可用的标准功能。查找test
内置函数的描述或有关条件表达式的部分,以查找诸如 之类的运算符-z
。
该命令[ -z $TEST_PARAM ]
实际上应该是[ -z "$TEST_PARAM" ]
,因为双引号外的变量扩展的作用远远大于扩展变量。看为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?更多细节。如果没有引号, 的值TEST_PARAM
将被拆分为单词,这些单词将扩展为全局模式。相反,"$TEST_PARAM"
扩展为变量的值TEST_PARAM
。如果 的值为TEST_PARAM
空,则 then$TEST_PARAM
扩展为零字列表,因此执行的命令为[ -z ]
。仅用一个单词来表达条件表达式,如果该单词非空,则条件为真。这里-z
不是一个运算符而是一些非空字符串。
也可以看看使用单括号或双括号 - bash
答案3
它的意思是“如果参数不存在,则执行以下操作”。
您可以通过以下方式查看:
$ ABC='1'
$
$ if [ -z $ABC ]; then echo "ABC"; # Nothing
fi;
$
$ if [ -z $XYZ ]; then echo "yes"; # echo "Yes"
fi;
yes
$
我使用它的一个例子是在我的.bashrc
文件中调用tmux
,但不是递归的,如下所示:
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux