数値を含む変数を使用すると問題が発生します。
これは機能します。
sourceid_2="blah"
echo $sourceid_2
しかし、これは機能しません。
sourceid_2="blah"
i=2
echo $sourceid_$i
これを修正する方法はありますか? アンダースコアなしで試してみましたが、効果はありませんでした。
私の最終目標は、for i in {2..7} ループ内の変数を使用して次の操作を実行することです。
for i in {2..7}
do
echo $sourceid_$i
done
答え1
echo $sourceid_$i
は 2 つの別々の変数を展開します:$sourceid_
および$i
。 実行しようとしていることを実行する最も簡単な方法は、間接参照を使用することです:
sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"
しかし、@dave_thompson_085 が指摘したように、このようなことを実行するには、通常、配列を使用する方が適しています。
declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"
配列は bash 拡張機能であり、より基本的なシェルでは使用できないことに注意してください。
答え2
問題は、問題なく動作する数字を含む名前ではなく、変数eval
(正しく実行するのは難しく、失敗しやすい)または間接的な表現を使うことができます。x=source_$i; echo "${!x}"
この場合、これは名前に変数を含むbash配列SX はすでに関連リストに自動的に追加してあるので、参照できます。
しかし、関連する複数の変数に番号でアクセスしたい場合は、配列を使用する方がよいでしょう。配列はまさにそのように設計されており、より便利で安全です。bashの配列について学ぶには、システムまたはウェブはこちら