数値を含む変数の実行に問題があります。
これはうまくいきます。
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の配列については、システムのBashマニュアルの配列セクションを参照してください。ここでオンライン