このBashスクリプトがあります
for i in 1 2 3
do
for j in 4 5 6
do
echo "hello_$i_$j"
done
done
しかし印刷されます
hello_4
hello_5
hello_6
3回、そして(おそらく)私は欲しいhello_1_4、hello_1_5、等。
アンダースコアをエスケープしたり、ドル記号のみを使用したりすると機能しません。どんなアイデアがありますか?
ありがとうございます!
答え1
set -u
コードの上部に次の行を追加します。その後、再度実行して何を得るかを確認します。
変数はunbound errorですi_
。つまり、どこにも定義されていません。 bashがこの変数について話しているのはなぜですかi_
?あなたはそれをどこにも定義しませんでした。 echo ドアを注意深く見てください。 $iの後の下線は有効な変数名識別子文字であるため、"hello_$i_$j"
変数と見なされます。i_
_
したがって、Bashがこれを防ぐには、変数名を中括弧で囲む必要があります{}
。たとえば、echo "Hello_${i}_${j}"
中括弧は変数名がオーバーフローして一致するのを防ぎます_
。注:変数の中括弧は目的を区別するために使用されるため、$j
オプションです。"
。