,如果你不介意不使用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