Оператор множественного сравнения в bash не работает - bash: [: missing `] '

Мне нужно сравнить переменную с несколькими переменными, как показано ниже.

if [ [ "$SECONDS" -ne "$one" || "$SECONDS" -ne "$two" ] ]

Этот оператор выдает ошибку

[: missing `]'

Как я могу сравнить значение СЕКУНД с единицей и двумя. Все это целочисленное сравнение.

1
задан 24 March 2019 в 11:48

2 ответа

Правильный синтаксис if для выражений в удар эта ссылка :

Таблица 7-2. Объединение выражений

Operation                  Effect
------------------    ------------------
[ ! EXPR ]            True if EXPR is false.
[ ( EXPR ) ]          Returns the value of EXPR. This may be used to override the normal precedence of operators.
[ EXPR1 -a EXPR2 ]    True if both EXPR1 and EXPR2 are true.
[ EXPR1 -o EXPR2 ]    True if either EXPR1 or EXPR2 is true.

Ваш, если оператор должен быть похожим на это:

if [ "$SECONDS" -ne "$one" -o "$SECONDS" -ne "$two" ]

4
ответ дан 3 December 2019 в 06:30

Можно также использовать [[ ключевое слово:

if [[ "$SECONDS" -ne "$one" || "$SECONDS" -ne "$two" ]];

Вот, это - диаграмма help [[:

 EXPR1 && EXPR2   True if both EXPR1 and EXPR2 are true; else false
 EXPR1 || EXPR2   True if either EXPR1 or EXPR2 is true; else false

, Когда Вы запускаете свой оператор с помощью [ затем пространство и другой [; Bash будет думать, что Вы работаете test (Сначала [) на другом test (второй [).

И перед Вашим || это будет искать ] литерал, не может найти его и жалуется на него.

2
ответ дан 3 December 2019 в 06:30

Другие вопросы по тегам:

Похожие вопросы: