-a -z 在 if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"] bash 条件中的含义
meaning of -a -z in if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"] bash conditional
中的-a -z
是什么意思
if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi
bash有条件?
第一个-z检查$ENV_VAR是否根据
定义
-z string True if the length of string is zero.
-a -z
组合测试与ENV_VAR2有什么关系?
根据docs
-a file True if file exists.
但是,ENV_VAR2 可能只包含文本,而不是文件名。
[ -z "$ENV_VAR" -a -z "$ENV_VAR2" ]
有 2 个条件 ANDed 一起使用 -a
开关:
意思是这样的:
-z "$ENV_VAR"
: $ENV_VAR
为空
-a
: 和
-z "$ENV_VAR2"
: $ENV_VAR2
为空
顺便说一句,如果您使用的是 bash
,您可以重构此条件以使其更简洁:
[[ -z $ENV_VAR && -z $ENV_VAR2 ]]
请试试这个"man test"。
理想情况下,在该输出中,您会看到 -a 在两个表达式之间执行 "AND"。
是"and"。
见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
中的 "and"。如果与 [[
一起使用,它是来自 bash.
的文件检查
bash解决方案:
$ [[ -z "" && -z "" ]] && echo Hello
Hello
为了 POSIX 兼容性,[[ ... && ... ]]
不可用,但 -a
被 POSIX 认为已过时(且可选),因此使用两个单独的 [
命令代替。
if [ -z "$ENV_VAR" ] && [ -z "$ENV_VAR2" ]; then
...
fi
-a -z
是什么意思
if [ -z "$ENV_VAR" -a -z "$ENV_VAR2"]; then
...
fi
bash有条件?
第一个-z检查$ENV_VAR是否根据
定义-z string True if the length of string is zero.
-a -z
组合测试与ENV_VAR2有什么关系?
根据docs
-a file True if file exists.
但是,ENV_VAR2 可能只包含文本,而不是文件名。
[ -z "$ENV_VAR" -a -z "$ENV_VAR2" ]
有 2 个条件 ANDed 一起使用 -a
开关:
意思是这样的:
-z "$ENV_VAR"
:$ENV_VAR
为空-a
: 和-z "$ENV_VAR2"
:$ENV_VAR2
为空
顺便说一句,如果您使用的是 bash
,您可以重构此条件以使其更简洁:
[[ -z $ENV_VAR && -z $ENV_VAR2 ]]
请试试这个"man test"。
理想情况下,在该输出中,您会看到 -a 在两个表达式之间执行 "AND"。
是"and"。
见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
中的 "and"。如果与 [[
一起使用,它是来自 bash.
bash解决方案:
$ [[ -z "" && -z "" ]] && echo Hello
Hello
为了 POSIX 兼容性,[[ ... && ... ]]
不可用,但 -a
被 POSIX 认为已过时(且可选),因此使用两个单独的 [
命令代替。
if [ -z "$ENV_VAR" ] && [ -z "$ENV_VAR2" ]; then
...
fi