在POSIXshell中,如何打印变量值的值

in POSIX shell, how to print the value of the value of a variable

在 POSIX shell:

>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

我把你的例子小写了;您不应该为私有变量使用大写字母,因为大写字母名称保留供系统使用。