20

私は bash スクリプトを持っています。2 つの変数を連結して 3 つ目の変数を呼び出す際に問題が発生しています。

これはスクリプトの簡略化ですが、ドキュメントを読んだ後、構文がわかりません。

server_list_all="server1 server2 server3";
var1 = "server";
var2 = "all";

echo $(($var1_list_$var2));

これは、私が正しい答えに近づくのとほぼ同じです。文字列を認識し、トークン化でエラーを投げます。

syntax error in expression (error token is "server1 server2 server3....

これに関するドキュメントには実際には何も表示されていませんが、実行可能なはずです。

編集:少しクリーンアップ

4

2 に答える 2

38

Bash リファレンス マニュアルでは、パラメーター展開の優れた機能を使用して間接化を行う方法について説明しています。あなたの場合、名前が他の2つの変数によって定義されている変数の内容を見つけることに興味があります:

server_list_all="server1 server2 server3"
var1=server
var2=all
combined=${var1}_list_${var2}

echo ${!combined}

を参照するときのエクスクラメーション マークcombinedは、combined"

于 2012-06-12T04:22:46.180 に答える
7

Advanced Bash Scripting Guideに答えがあります(http://tldp.org/LDP/abs/html/ivr.html)。2つのオプションがあります。1つはクラシックシェルです。

 #!/bin/bash

 server_list_all="server1 server2 server3";
 var1="server";
 var2="all";

 server_var="${var1}_list_${var2}"
 eval servers=\$$server_var;

 echo $servers

または、bashショートカット$ {!var}を使用することもできます

 #!/bin/bash

 server_list_all="server1 server2 server3";
 var1="server";
 var2="all";

 server_var="${var1}_list_${var2}"
 echo ${!server_var}

どちらのアプローチでも機能します。

于 2012-06-12T04:35:00.217 に答える