,如果你不介意不使用case
,這就需要模式後命令,如果你的Bash版本支持關聯數組,你可以做[更新根據註釋]:
[email protected]:/tmp$ cat /tmp/test.sh; echo ---; bash /tmp/test.sh
declare -A values=([abc]=0 [111]=5 [fff]=10); default=20
function add() {
number=$1; index=$2;
echo $(($number + ${values[$index]:-$default}))
}
for test in 123 abc n 111 abz fff; do echo 2+values[$test]=$(add 2 $test); done
---
2+values[123]=22
2+values[abc]=2
2+values[n]=22
2+values[111]=7
2+values[abz]=22
2+values[fff]=12
請注意,當我第一次進行這種修改時,出於某種原因,我的Bash版本顯示出奇怪的行爲,可能是由於我的數組不是這個數組。除了第一個測試,所使用的默認值是10,這是數組的最後一個賦值元素,它使用數組元素abc的值爲0的缺省值。值得注意的是,也許我會在某天:
[email protected]:/tmp$ cat /tmp/test.sh; echo ---; bash /tmp/test.sh
function add() {
number=$1; index=$2; values=([abc]=0 [111]=5 [fff]=10); default=20
echo $(($number + ${values[$index]-$default}))
}
for test in 123 abc n 111 abz fff; do echo 2+values[$test]=$(add 2 $test); done
---
2+values[123]=22
2+values[abc]=12
2+values[n]=12
2+values[111]=7
2+values[abz]=12
2+values[fff]=12
還要注意的是,在更新上面的例子讓我感動的靜態值子程序之外,因爲它可能更有意義,讓他們成爲全球性的腳本。
如果你必須使用case,那麼你會非常譴責在模式之後使用命令,儘管可以將這些數字轉換爲命令,但這不是很好的維護或可讀性。你可以用內置的echo來代替'printf'。 –
'回聲'的作品,但我想你也不想那樣。 – Hussain