Я пытался понять, что с этим не так, но просто не могу понять ...
Эта часть, кажется, получает ошибку ..
elif [ $operation = "man" ]; then
if [ $aug1 = "add" ]; then # <- Line 75
echo "Man Page for: add"
echo ""
echo "Syntax: add [number 1] [number 2]"
echo ""
echo "Description:"
echo "Add two different numbers together."
echo ""
echo "Info:"
echo "Added in v1.0"
echo ""
elif [ -z $aug1 ]; then
echo "Please specify a command to read the man page."
else
echo "There is no manual page for that command."
fi
Я получаю эту ошибку:
calc_1.2: line 75: [: =: unary operator expected
if
заявление по строке 75 нуждается вfi
.Ответы:
Если вы знаете, что всегда будете использовать bash, гораздо проще всегда использовать команду условного составного числа в двойных скобках
[[ ... ]]
, а не версию, совместимую с Posix[ ... ]
. Внутри[[ ... ]]
составной части деление слов и расширение пути не применяются к словам, поэтому вы можете положиться насравнить значение
$aug1
со строкойand
.Если вы используете
[ ... ]
, вы всегда должны помнить о двойных кавычках переменных, как это:Если вы не заключили в кавычки расширение переменной, а переменная не определена или пуста, она исчезает с места преступления, оставляя только
который не является допустимым синтаксисом. (Это также приведет к ошибке с другим сообщением об ошибке, если
$aug1
включены пробелы или метасимволы оболочки.)Современный
[[
оператор обладает множеством других полезных функций, включая сопоставление регулярных выражений.источник
Мне потребовалось некоторое время, чтобы найти это, но обратите внимание, что если у вас есть ошибка пробела, вы также получите ту же ошибку:
Верный:
против
Как всегда установка
-x
переменной отладки помогает найти эти:источник
Попробуйте присвоить значение,
$aug1
прежде чем использовать его вif[]
выражениях; сообщение об ошибке исчезнет впоследствии.источник
ты говоришь ... :
я думаю, что это просто пространство ... сделать так:
источник
Вы также можете установить значение по умолчанию для переменной, поэтому вам не нужно использовать два «[», что означает два процесса («[» на самом деле программа) вместо одного.
Это идет по этому синтаксису: $ {VARIABLE: -default}.
Все это должно быть продумано таким образом, чтобы это значение по умолчанию отличалось от «действительного» значения / контента.
Если по какой-то причине это невозможно, вам, вероятно, нужно добавить шаг, например, проверить, есть ли значение вообще, по строкам «if [-z $ VARIABLE]; затем echo« переменная должна быть заполнена », или« если [! -z $ VARIABLE]; тогда #everything в порядке, продолжайте работу с остальным сценарием ".
источник
[[
не порождает два процесса, это встроенная оболочка (и[
тоже встроенная в Bash).[[
отличается от того[ [
, который обрабатывает второй[
как строку