English 中文(简体)
Bash - 变量变量 [重复]
原标题:Bash - variable variables [duplicate]

我有变量 $foo=" 某事" ,并想使用:

bar="foo"; echo $($bar)

得到"东西"的回响。

最佳回答

在shash 中,您可以使用 ${! 可变{%/code> 来使用变量变量。

foo="something"
bar="foo"
echo "${!bar}"

# something
问题回答

被接受的答案是巨大的。 然而, @ Edison 询问了如何对数组做同样的事情。 关键在于您想要您设置的变量持有“ [@] ”, 使数组以“! ” 扩展。 请检查此函数以倾弃变量 :

$ function dump_variables() {
    for var in "$@"; do
        echo "$var=${!var}"
    done
}
$ STRING="Hello World"
$ ARRAY=("ab" "cd")
$ dump_variables STRING ARRAY ARRAY[@]

这一产出:

STRING=Hello World
ARRAY=ab
ARRAY[@]=ab cd

当仅给定 ARRAY 时,第一个元素显示为 ! 所扩展的内容。通过给定 ARRAY[@] 格式,您可以得到数组及其所有值的扩展。

eval回声 "$bar" 将做到这一点。

为了更清楚地说明如何用数组来进行:

arr=(  a   b   c  )
# construct a var assigning the string representation 
# of the variable (array) as its value:
var=arr[@]         
echo "${!var}"




相关问题
Parse players currently in lobby

I m attempting to write a bash script to parse out the following log file and give me a list of CURRENT players in the room (so ignoring players that left, but including players that may have rejoined)...

encoding of file shell script

How can I check the file encoding in a shell script? I need to know if a file is encoded in utf-8 or iso-8859-1. Thanks

Bash usage of vi or emacs

From a programming standpoint, when you set the bash shell to use vi or emacs via set -o vi or set -o emacs What is actually going on here? I ve been reading a book where it claims the bash shell ...

Dynamically building a command in bash

I am construcing a command in bash dynamically. This works fine: COMMAND="java myclass" ${COMMAND} Now I want to dynamically construct a command that redirectes the output: LOG=">> myfile.log ...

Perform OR on two hash outputs of sha1sum

I want perform sha1sum file1 and sha1sum file2 and perform bitwise OR operation with them using bash. Output should be printable i.e 53a23bc2e24d039 ... (160 bit) How can I do this? I know echo $(( ...

Set screen-title from shellscript

Is it possible to set the Screen Title using a shell script? I thought about something like sending the key commands ctrl+A shift-A Name enter I searched for about an hour on how to emulate ...