2016-03-26 80 views
0

值的值在POSIX外殼:在POSIX外殼,如何打印可變

>VALUE=value 
>FOOBAR=VALUE 

現在如何打印的$FOOBAR價值? $$FOOBAR不起作用 - 它從左到右,因此首先將$$解釋爲進程ID。

在我面前人們指着的重複問題,是的,它確實包含了我的問題的答案,但它埋在了大量不相干的垃圾中。我的問題非常簡單並且重要。

+0

你試過'$($ FOOBAR))'嗎? – Bharel

+1

@Bharel當然不起作用,因爲上述相同的原因 - 殼解釋從左到右 –

+0

http://stackoverflow.com/questions/10757380/bash-variable-variables –

回答

0

要在POSIX中執行此操作的唯一方法是使用eval,因此請非常確定FOOBAR只包含一個有效的變量名稱。

$ VALUE=value 
$ FOOBAR=VALUE 
$ valid_var='[[:alpha:]_][[:alnum:]_]*$' 
$ expr "$FOOBAR" : "$valid_var" > /dev/null && eval "echo \$$FOOBAR" 
1

對於POSIX可移植性,你幾乎只剩下

eval echo \$$variable 

通常的警告適用;如果您傳入的字符串不完全且完全由您自己控制,請勿使用eval

我縮小了你的例子;你不應該爲你的私有變量使用大寫字母,因爲大寫名字是保留給系統使用的。