我想让这段代码更自然:
#!/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
相比之下,最初的荒谬看起来不那么不合理。