【发布时间】:2016-09-14 23:13:41
【问题描述】:
我有以下情况:
if [ ! -z $DateC -a "$DateC"=="$DateJ" ]
如果想知道 -z 和 -a 的含义。我不明白这个条件验证了什么。我已经在网上搜索了 -a 和 -z ,但我并没有真正了解它的作用。有什么帮助吗?
【问题讨论】:
我有以下情况:
if [ ! -z $DateC -a "$DateC"=="$DateJ" ]
如果想知道 -z 和 -a 的含义。我不明白这个条件验证了什么。我已经在网上搜索了 -a 和 -z ,但我并没有真正了解它的作用。有什么帮助吗?
【问题讨论】:
请检查man test:
-z STRING
the length of STRING is zero
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
所以这会检查$DateC 的长度是否不为零并且$DateC 和$DateJ 是否相等。
if [ ! -z $DateC -a "$DateC"=="$DateJ" ]
# ^^^^^^^^^ ^^
# | AND
# |
# length of string is zero
#
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
# length of string is NOT zero
看一个例子:
$ r=hello
$ s=hello
$ [ "$r"=="$s" ] && echo "yes" || echo "no"
yes
其他条件:
$ t=""
$ if [ ! -z "$t" -a "$r"=="$s" ]; then echo "yes"; else echo "no"; fi
no
$ t=a
$ if [ ! -z "$t" -a "$r"=="$s" ]; then echo "yes"; else echo "no"; fi
yes
最后,
请注意,POSIX 建议将
&&和||与-a和-o上的单括号符号,所以如果你正在写 可移植代码使用第一个符号,否则第二个并跳过 第三,特别是因为如果你 需要对表达式进行分组。 – Adrian Frühwirth (source)
【讨论】: