echo $HOSTNAME 结果成为变量的关键

-1 linux

有人可以帮我写一个 bash 脚本吗?似乎无法将我的思绪包裹起来。

财产

server1=abc,def,ghc
server2=xyz,tes,iuy


echo $server1
abc,def,ghc

echo $HOSTNAME
server1
Run Code Online (Sandbox Code Playgroud)

有了上面的这些信息,我想在测试变量中输出输出“abc,def,ghc”。

echo \$$HOSTNAME
$server1

bash-4.1$ test=`echo \$$HOSTNAME`
bash-4.1$ echo $test
8722HOSTNAME
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我在 perl/bash 或任何我可以使用的代码中完成这项工作。谢谢你。

Mic*_*ton 5

您正在寻找:

${!HOSTNAME}
Run Code Online (Sandbox Code Playgroud)

例如

echo ${!HOSTNAME}
Run Code Online (Sandbox Code Playgroud)

这通常称为嵌套变量。bash 手册页解释了这个结构是如何工作的:

       ${!prefix*}
              Names matching prefix. Expands to the names of variables whose
              names begin with prefix, separated by the first character of the
              IFS special variable.
Run Code Online (Sandbox Code Playgroud)

但是,在这种特殊情况下要小心,因为$HOSTNAME通常包含计算机的主机名,它应该是一个完全限定的域名,而这些包含点,这在 bash 变量名中是无效的。