Linux命令行和Shell脚本圣经,[1]第462页给出了以下示例,该示例通过将数组的各个值作为函数参数传递并将其重新组合为函数内部的数组:
$ cat test10 #!/bin/bash # array variable to function test function testit { local newarray newarray=(;'echo "$@"') echo "The new array value is: ${newarray[*]}" } myarray=(1 2 3 4 5) echo "The original array is ${myarray[*]}" testit ${myarray[*]} $ $ ./test10 The original array is 1 2 3 4 5 The new array value is: 1 2 3 4 5 $
;
在newarray=(;'echo "$@"')
位中是什么意思?并且是否需要单引号?
ls; echo ok; exit
但是这在var或数组中不起作用。
a="ls; echo ok" $ $a Command 'ls;' not found, did you mean: ...
为了使示例执行文本所要尝试的操作,这:
newarray=(;'echo "$@"')
应该就是这个:
newarray=("$@")
(没有;
,没有'
,没有echo
)。另外,此:
testit ${myarray[*]}
应该是这个:
testit "${myarray[@]}"
(["
,@
而不是*
),以避免在数组元素包含空格或特殊字符时出现异常。 (通常,从我看过的几页来看,这本书似乎并没有演示健壮的代码;因此,即使对于在简单输入下尝试即可使用的示例,我也不建议过分信任在其中。)