2013-03-20 2 views
7

Хорошо, поэтому в моем сценарии (это мой первый раз, когда я работаю с bash). Я встречаюсь с 2 ожидаемыми ошибками операционного оператора. Сам код на самом деле работает нормально, но он представляет мне эти ошибки во время выполнения.Bash Unary Operator Ожидаемый

[: !=: unary operator expected 

для линии

if [ ${netmask[1]} != "" ]; do 

так для первой ошибки, он бросил, когда ${netmask[1]} является "" (null), я пытался несколько идей и до сих пор не могу заставить его работать без возврата, что ошибка в процессе

Любая помощь будет оценена!

EDIT: решаемый путем добавления кавычки (Grrr)

if [ "${netmask[1]}" != "" ]; do 
+0

спасибо, что помогло исправить мою ошибку очень быстро. Объяснение составляет около 2/3 пути вниз по этой странице, если это не очевидно для кого-либо другого http://linuxcommand.org/wss0100.php – craq

ответ

5

Если вы хотите проверить значение null для переменного, используйте -z оператор:

if [ -z "${netmask[1]}" ]; then 

На примере:

VAR="" 

if [ -z "$VAR" ]; then 
    echo This will get printed 
fi 

Редактировать: Обратите внимание на круглые скобки вокруг переменной: "$VAR".

+0

Я тоже пробовал это, но он, похоже, не работает, вместо этого он на самом деле инвертирует истинные и ложные значения для цикла. т. е. когда это должно быть правдой, оно входит в другое, и когда оно должно быть ложным, это говорит о том, что оно истинно. – ThePGtipsy

+0

@ThePGtipsy. Я думаю, что у вас есть другое значение '$ {netmask [1]}', чем '' ''. Посмотрите на пример в моем ответе - он работает так, как ожидалось. – kamituel

+0

@ThePGtipsy - хе, я включил кавычки;) – kamituel

Смежные вопросы