中
-a -z
的含义是什么
if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi
有条件的打击?
第一个-z检查是否根据
定义了 $ ENV_VAR-z字符串如果字符串的长度为零,则为true。
-a -z
组合与 ENV_VAR2 有什么关系?
根据docs
-a文件如果文件存在,则为true。
但是, ENV_VAR2 只能包含文本,而不能包含文件名。
答案 0 :(得分:2)
[ -z "$ENV_VAR" -a -z "$ENV_VAR2" ]
具有2个条件,使用-a
开关一起 AND :
这是什么意思
-z "$ENV_VAR"
:$ENV_VAR
为空-a
:和-z "$ENV_VAR2"
:$ENV_VAR2
为空顺便说一句,如果您使用的是bash
,则可以重构此条件以使其更加简洁:
[[ -z $ENV_VAR && -z $ENV_VAR2 ]]
答案 1 :(得分:1)
请尝试此“人工测试”。
理想情况下,在该输出中,您将看到-a在两个表达式之间执行“与”运算。
答案 2 :(得分:1)
是“和”。
请参见man test
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
示例:
$ [ -z "" -a -z "" ] && echo Hello
Hello
$ [[ -z "" -a -z "" ]] && echo Hello
bash: syntax error in conditional expression
bash: syntax error near `-a'
如果与单个[
一起使用,则它是test
中的“与”。如果与[[
一起使用,则是bash中的文件检查。
bash解决方案:
$ [[ -z "" && -z "" ]] && echo Hello
Hello
答案 3 :(得分:1)
出于POSIX兼容性的考虑,[[ ... && ... ]]
不可用,但是POSIX认为-a
已过时(并且是可选的),因此请使用两个单独的[
命令。
if [ -z "$ENV_VAR" ] && [ -z "$ENV_VAR2" ]; then
...
fi