假设你写了一些函数来收集数组中的一些值。
my_algorithm() { create_array # call create_array somehow # here,work with the array "returned" from my_list } create_array() { local my_list=("a","b","c") }
如何“返回”my_list,而不使用任何全球性?
编辑
我可以做点像
my_algorithm() { local result=$(create_array) } create_array() { local my_list=("a","c") echo "${my_list[@]}" }
但是,然后,我只得到一个扩展字符串(或者这是走的路?)。
全局变量有什么问题?
返回数组真的不实用。有很多陷阱。
也就是说,这里有一个技术,如果它是正确的,变量具有相同的名称:
$ f () { local a; a=(abc 'def ghi' jkl); declare -p a; } $ g () { local a; eval $(f); declare -p a; } $ f; declare -p a; echo; g; declare -p a declare -a a='([0]="abc" [1]="def ghi" [2]="jkl")' -bash: declare: a: not found declare -a a='([0]="abc" [1]="def ghi" [2]="jkl")' -bash: declare: a: not found
declare -p命令(除了f()中的命令用于显示数组的状态以用于演示。在f()中,它用作返回数组的机制。
如果你需要数组有不同的名字,你可以这样做:
$ g () { local b r; r=$(f); r="declare -a b=${r#*=}"; eval "$r"; declare -p a; declare -p b; } $ f; declare -p a; echo; g; declare -p a declare -a a='([0]="abc" [1]="def ghi" [2]="jkl")' -bash: declare: a: not found -bash: declare: a: not found declare -a b='([0]="abc" [1]="def ghi" [2]="jkl")' -bash: declare: a: not found