我有一个创建数组的函数,我想将数组返回给调用者:
create_array() { local my_list=("a", "b", "c") echo "${my_list[@]}" }
my_algorithm() { local result=$(create_array) } 这样,我只会得到一个扩展的字符串。如何不使用全局变量就“返回” my_list? 问题来源于stack overflow
全局变量有什么问题?
返回数组确实不切实际。有很多陷阱。
也就是说,如果可以确定变量具有相同的名称,这是一种可行的技术:
$ 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命令(除了in in外,这些命令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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。