开发者社区> 问答> 正文

如何在不使用全局变量的情况下以bash返回数组?

我有一个创建数组的函数,我想将数组返回给调用者:

create_array() { local my_list=("a", "b", "c") echo "${my_list[@]}" }

my_algorithm() { local result=$(create_array) } 这样,我只会得到一个扩展的字符串。如何不使用全局变量就“返回” my_list? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 22:07:24 435 0
1 条回答
写回答
取消 提交回答
  • 全局变量有什么问题?

    返回数组确实不切实际。有很多陷阱。

    也就是说,如果可以确定变量具有相同的名称,这是一种可行的技术:

    $ 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

    2020-02-08 22:07:37
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载