значение сценария оболочки по умолчанию - PullRequest
0 голосов
/ 10 августа 2010

Я пытаюсь изучить сценарии оболочки, и меня немного смущает идея: = или значение по умолчанию

#!/bin/sh                                                                                                                             

echo "Please enter a number \c"
read input
input=$((input % 2))

if [ $input -eq 0 ]
then
    echo "The number is even"
else
    echo "The number is odd"
fi

echo "Beginning of second part"
a="BLA" 
a="Dennis"
echo $a
unset a
echo "a after unsetting"
echo $a
${a:=HI}
echo "unsetting a again"
unset a
echo $a

И я получаю это

Dennis
a after unsetting

./ifstatement.sh: line 21: HI: command not found
unsetting a again

Ответы [ 4 ]

5 голосов
/ 10 августа 2010

Когда вы пишете

${a:=HI}

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

Вместо, напишите

: "${a:=HI}"

: - это команда no-op.Кавычки не позволяют оболочке пытаться выполнить сглаживание, что в редких случаях может привести к замедлению или ошибке.

1 голос
/ 10 августа 2010

Нет способа установить значение, к которому переменная всегда будет «откатываться», когда вы ее отменяете. Когда вы используете команду unset, вы удаляете переменную (а не просто очищаете значение, связанное с ней), поэтому она не может иметь любое значение, значение по умолчанию или другое.

Вместо этого попробуйте комбинацию из двух вещей. Сначала убедитесь, что переменная инициализирована. Во-вторых, создайте функцию, которая устанавливает для переменной желаемое значение по умолчанию. Вызовите эту переменную вместо unset. С помощью этой комбинации вы можете смоделировать переменную со значением «по умолчанию».

0 голосов
/ 10 августа 2010

Вместо звонка unset $a, вы делаете ${a:=HI} снова

0 голосов
/ 10 августа 2010

${a:=HI} расширяется до HI, который ваша оболочка затем пытается запустить как команду. Если вы просто пытаетесь установить значение переменной, если оно не установлено, вы можете сделать что-то вроде [ -z "$b" ] && b=BYE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...