2016-05-18 3 views
0

У меня есть ниже условие:КШ сценариев: -z и -a

if [ ! -z $DateC -a "$DateC"=="$DateJ" ] 

Если бы, как знать, что -z и -a средства. Я не понимаю, что это условие проверяет. Я искал сеть для -a и -z, но я действительно не понимаю, что она делает. Любая помощь, PLS?

ответ

1

Проверить 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)