Попробуйте
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}
.
Команда :
позволяет нам выполнять назначение без каких-либо других действий.