Bash Shell - The: Command - PullRequest
       19

Bash Shell - The: Command

3 голосов
/ 25 апреля 2011

Команда двоеточия является нулевой командой.

Конструкция: также полезна для условной установки переменных.Например,

: ${var:=value}

Без : оболочка будет пытаться вычислить $ var как команду.<= ??? </p>

Я не совсем понимаю последнее предложение в приведенном выше утверждении.Кто-нибудь может дать мне некоторые детали?

Спасибо

Ответы [ 4 ]

5 голосов
/ 25 апреля 2011

Попробуйте

var=badcommand
$var

Вы получите

bash: badcommand: command not found

Попробуйте

var=
${var:=badcommand}

и получите то же самое.

Оболочка(например, bash) всегда пытается запустить первое слово в каждой командной строке как команду, даже после расширения переменной.

Единственное исключение из этого -

var=value

, которое обрабатывается оболочкойспециально.

Хитрость в приведенном вами примере заключается в том, что ${var:=value} работает в любом месте командной строки, например,

# set newvar to somevalue if it isn't already set
echo ${newvar:=somevalue}
# show that newvar has been set by the above command
echo $newvar

Но на самом деле мы даже не хотим отображать значение,поэтому мы хотим что-то лучше, чем
echo ${newvar:=somevalue}.

Команда : позволяет нам выполнять назначение без каких-либо других действий.

2 голосов
/ 25 апреля 2011

Полагаю, авторы страниц справочника имели в виду

: ${var:=value}

Может использоваться как короткий путь вместо, скажем,

if [ -z "$var" ]; then
    var=value
fi
1 голос
/ 25 апреля 2011

${var} самостоятельно выполняет команду, хранящуюся в $var. Добавление параметров замещения не меняет этого, поэтому вы используете :, чтобы нейтрализовать это.

0 голосов
/ 26 апреля 2011

Попробуйте это:

$ help :
:: :
    Null command.

    No effect; the command does nothing.

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