1

我想让这段代码更自然:

#!/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

相比之下,最初的荒谬看起来不那么不合理。

4

2 回答 2

0

尝试这个:

function f() {
    eval "echo \${$1[@]}"
}
于 2013-04-01T02:29:21.790 回答
0

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

function f() {
    local -a words_to_use=($(eval echo \$\{${1}[@]\}))
    echo ${words_to_use[@]}
}
于 2013-04-01T03:04:39.373 回答