shell脚本默认值

den*_*iss 0 unix bash shell

我正在尝试学习shell脚本,我对以下的想法感到困惑:=或默认值

#!/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
Run Code Online (Sandbox Code Playgroud)

我明白了

Dennis
a after unsetting

./ifstatement.sh: line 21: HI: command not found
unsetting a again
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

当你写作

${a:=HI}
Run Code Online (Sandbox Code Playgroud)

shell将扩展的结果拆分为单词,并将第一个单词解释为命令,就像对任何命令行一样.

相反,写

: "${a:=HI}"
Run Code Online (Sandbox Code Playgroud)

:是一个无操作命令.引号阻止shell尝试进行globbing,这在极少数情况下可能导致减速或错误.