属性
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";
这两种变体都不是很好,并且跨越了干净脚本的许多边界。