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

Я получил эту ошибку "Connection to PulseAudio failed", когда были разные значения переменной среды XDG_RUNTIME_DIR.

Сервер pulseaudio работал с одним значением, а pavucontrol работал с другим стоимость. Следовательно, pavucontrol искал неправильный каталог для сокета связи, созданного pulseaudio.

В этом случае решение состоит в том, чтобы убедиться, что оба процесса имеют одинаковое значение для среды XDG_RUNTIME_DIR переменная.

1
задан 9 May 2017 в 16:42

4 ответа

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

Таблица 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 должен выглядеть следующим образом:

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

3
ответ дан 18 July 2018 в 13:35

Вы также можете использовать ключевое слово [[:

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 (второй [).

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

2
ответ дан 18 July 2018 в 13:35

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

Таблица 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 должен выглядеть следующим образом:

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

3
ответ дан 24 July 2018 в 20:12

Вы также можете использовать ключевое слово [[:

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 (второй [).

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

2
ответ дан 24 July 2018 в 20:12

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

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