在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
。
我把你的例子小写了;您不应该为私有变量使用大写字母,因为大写字母名称保留供系统使用。
在 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
。
我把你的例子小写了;您不应该为私有变量使用大写字母,因为大写字母名称保留供系统使用。