Bash扩展数组,其名称包含在函数参数中

时间:2013-04-01 02:09:53

标签: bash

我想让这段代码更自然:

#!/bin/bash

 declare -ra dev_monikers=(foo bar baz)
 declare -ra starwars_expletives=(farkled kark crink)

 function f() {
   local -r weird_expansion="$1[@]"
   local -ra words_to_use=(${!weird_expansion})
   echo "${words_to_use[@]}"
 }

 f dev_monikers
 echo ---
 f starwars_expletives

具体来说:使用weird_expansion辅助变量似乎很奇怪。在Bash中有更简单的方法吗?

以上输出:

foo bar baz
---
farkled kark crink

我尝试了工作的事情:

words_to_use=(${${1}[@]}) # error
words_to_use=(${$1[@]}) # error
words_to_use=(${!$1[@]}) # error
words_to_use=(${!1[@]}) # error
words_to_use=(${!${1}[@]}) # error
words_to_use=(${${!1}[@]} # error
相比之下,最初的荒谬看起来不那么无理......

2 个答案:

答案 0 :(得分:0)

试试这个:

function f() {
    eval "echo \${$1[@]}"
}

答案 1 :(得分:0)

这不一定更漂亮,但没有辅助变量:

function f() {
    local -a words_to_use=($(eval echo \$\{${1}[@]\}))
    echo ${words_to_use[@]}
}