值的值在POSIX外殼:在POSIX外殼,如何打印可變
>VALUE=value
>FOOBAR=VALUE
現在如何打印的$FOOBAR
價值? $$FOOBAR
不起作用 - 它從左到右,因此首先將$$
解釋爲進程ID。
在我面前人們指着的重複問題,是的,它確實包含了我的問題的答案,但它埋在了大量不相干的垃圾中。我的問題非常簡單並且重要。
值的值在POSIX外殼:在POSIX外殼,如何打印可變
>VALUE=value
>FOOBAR=VALUE
現在如何打印的$FOOBAR
價值? $$FOOBAR
不起作用 - 它從左到右,因此首先將$$
解釋爲進程ID。
在我面前人們指着的重複問題,是的,它確實包含了我的問題的答案,但它埋在了大量不相干的垃圾中。我的問題非常簡單並且重要。
要在POSIX中執行此操作的唯一方法是使用eval
,因此請非常確定FOOBAR
只包含一個有效的變量名稱。
$ VALUE=value
$ FOOBAR=VALUE
$ valid_var='[[:alpha:]_][[:alnum:]_]*$'
$ expr "$FOOBAR" : "$valid_var" > /dev/null && eval "echo \$$FOOBAR"
對於POSIX可移植性,你幾乎只剩下
eval echo \$$variable
通常的警告適用;如果您傳入的字符串不完全且完全由您自己控制,請勿使用eval
。
我縮小了你的例子;你不應該爲你的私有變量使用大寫字母,因爲大寫名字是保留給系統使用的。
你試過'$($ FOOBAR))'嗎? – Bharel
@Bharel當然不起作用,因爲上述相同的原因 - 殼解釋從左到右 –
http://stackoverflow.com/questions/10757380/bash-variable-variables –