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

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

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

#!/bin/sh

echo $server1
abc,def,ghc

echo $HOSTNAME
server1

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

echo \$$HOSTNAME
$server1

bash-4.1$ test=`echo \$$HOSTNAME`
bash-4.1$ echo $test
8722HOSTNAME

我怎样才能在 perl/bash 中完成这个工作?

答案1

man 1 bash说:

如果参数的第一个字符是感叹号 (!),则它引入了一级变量间接寻址。 Bash 使用由参数的其余部分形成的变量的值作为变量的名称;然后扩展该变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ echo ${!HOSTNAME}
abc,def,ghc

答案2

在bash中:

$ server1=abc,def,ghc
$ HOSTNAME=server1
$ eval "echo \$$HOSTNAME"
abc,def,ghc

在 Perl 中(不使用 strict):

$server1 = "abc,def,ghc";
$HOSTNAME = "server1";
print "$$HOSTNAME\n";

这两种变体都不是很好,并且跨越了干净脚本的许多边界。

相关内容