属性
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
バッシュから:
$ server1=abc,def,ghc
$ HOSTNAME=server1
$ eval "echo \$$HOSTNAME"
abc,def,ghc
Perlでは(厳密ではなく):
$server1 = "abc,def,ghc";
$HOSTNAME = "server1";
print "$$HOSTNAME\n";
両方のバリエーションは非常に優れておらず、きちんとしたスクリプトの多くの境界を超えています。