【发布时间】:2017-05-15 05:43:14
【问题描述】:
在 UNIX 终端中,当我编写以下命令时:
$ a=b
$ c=a
$ echo $$c
我希望输出是 b,因为 c 的值是 a,a 的值是 b。
但是,我收到的输出却是:2861c。
谁能告诉我这个输出背后的原因?
【问题讨论】:
标签: bash scripting output echo
在 UNIX 终端中,当我编写以下命令时:
$ a=b
$ c=a
$ echo $$c
我希望输出是 b,因为 c 的值是 a,a 的值是 b。
但是,我收到的输出却是:2861c。
谁能告诉我这个输出背后的原因?
【问题讨论】:
标签: bash scripting output echo
echo $$c 打印您的终端 PID 和后面的字母“c”。您可以通过 'ps aux | 进行验证。 grep bash'。
【讨论】:
来自http://www.tldp.org/LDP/abs/html/internalvariables.html
$$ 给出当前运行的 shell 实例的 PID。
bash4$ 回声 $$ 11015
bash4$ echo $BASHPID 11015
第一个 $ 符号捕获下一个字符并打印该值。
对于您的情况,双重替换是最好的选择。
echo ${!c}
或者你可以选择
eval echo \$$c
【讨论】:
$$ 是 BASH 的特殊变量,用于打印当前脚本执行的进程 ID。所以$$c 打印进程 id 后跟 c 字母
如果你还想存档对变量的间接引用,
a=b
c=a
echo ${!c} #will print "b" on console
【讨论】: