bash + インスタンス番号を使用して配列変数を定義する方法

bash + インスタンス番号を使用して配列変数を定義する方法

machine1という変数をmachine $ counter(counter = 1の間)として定義できますか?

たとえば、次のファイルを作成し、/tmp/config.txtmachine1を配列に設定しました。

 $ more /tmp/config.txt
 machine1=( linux_server critical 1.1.1.1 )
 machine2=( linux_server critical 1.1.1.2 )
 .
 .

次に、次のような簡単なスクリプトを作成して、/tmp/config.txt次のようにマシン配列を印刷してみました。

 $ more read.config.bash
 #!/bin/bash

 source /tmp/config.txt
 counter=1
 echo ${machine$counter[0]}
 echo ${machine$counter[1]}
 echo ${machine$counter[2]}
 .
 .

ただし、スクリプトを実行すると、次の結果が表示されます。

$ ./read.config.bash
./read.config.bash: line 6: ${machine$counter[0]}: bad substitution
./read.config.bash: line 7: ${machine$counter[1]}: bad substitution
./read.config.bash: line 8: ${machine$counter[2]}: bad substitution

この問題に対する解決策は何ですか?

ベストアンサー1

evalコマンドを使用してください。

eval "echo \${machine${counter[0]}}"

最初の項目はエスケープされるため、$文字列が処理される前に評価されません。eval

どのように機能するかは、evalコマンドプロンプトにコマンドを入力するのと同じようにコマンドを実行することです。違いは、実行される命令をプログラム的に設定できることです。

したがって、あなたのシナリオevalでコマンドを実行すると、コマンドは次のようになります。実際に実行は次のとおりです。echo ${machineBLAH}.内部変数置換はシェルでのみ行われました。今後 eval走る。

詳細については、次の記事を参照してください。Bashの「eval」コマンドは何ですか?

おすすめ記事