我想让这段代码更自然:
#!/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
相比之下,最初的荒谬看起来不那么无理......
答案 0 :(得分:0)
试试这个:
function f() {
eval "echo \${$1[@]}"
}
答案 1 :(得分:0)
这不一定更漂亮,但没有辅助变量:
function f() {
local -a words_to_use=($(eval echo \$\{${1}[@]\}))
echo ${words_to_use[@]}
}