簡體   English   中英

Shell腳本默認值

[英]shell scripting default value

我正在嘗試學習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

我明白了

Dennis
a after unsetting

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

當你寫

${a:=HI}

shell將擴展結果拆分為多個單詞,並將第一個單詞解釋為命令,就像在任何命令行中一樣。

相反,寫

: "${a:=HI}"

:是無操作命令。 用引號引起來的shell不會嘗試進行globing,這在極少數情況下可能會導致速度降低或出現錯誤。

沒有一種方法可以設置一個值,當您取消設置變量時,該變量將始終“回退”到該值。 使用unset命令時,您將刪除變量(而不僅僅是清除與之關聯的值),因此它不能具有任何值(默認值或其他值)。

而是嘗試結合兩種方法。 首先,確保變量已初始化。 其次,創建一個將變量設置為所需默認值的函數。 調用此變量而不是unset 通過這種組合,您可以模擬具有“默認”值的變量。

${a:=HI}擴展為HI ,然后您的shell嘗試作為命令運行。 如果您只是嘗試設置未設置的變量的值,則可能需要執行[ -z "$b" ] && b=BYE

不用調用未unset $a ,而是再次執行${a:=HI}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM