2017-11-03 6 views
0

いくつかの変数を展開していないと、簡略化した例にある出力バッシュ私はarray.Bellowでいくつかのコマンドを格納しています

#!/bin/bash 
test_arr=() 
x="mural.png" 
for q in 10 12 14; do 
    for i in 4 6 8; do 
    test_arr+=("$x_$q_$i") 
    done 
done 
echo "${test_arr[@]}" 

unset test_arr 
for q in 10 12 14; do 
    for i in 4 6 8; do 
    test_arr+=("$x"_"$q"_"$i") 
    done 
done 
echo "${test_arr[@]}" 

4 6 8 4 6 8 4 6 8 
4 6 8 4 6 8 4 6 8 test_stack.png_10_4 test_stack.png_10_6 test_stack.png_10_8 test_stack.png_12_4 test_stack.png_12_6 test_stack.png_12_8 test_stack.png_14_4 test_stack.png_14_6 test_stack.png_14_8 

以下は正しい出力を与える

#!/bin/bash 
test_arr=() 
x="mural.png" 
#for q in 10 12 14; do 
# for i in 4 6 8; do 
# test_arr+=("$x_$q_$i") 
# done 
#done 
#echo "${test_arr[@]}" 

unset test_arr 
for q in 10 12 14; do 
    for i in 4 6 8; do 
    test_arr+=("$x"_"$q"_"$i") 
    done 
done 
echo "${test_arr[@]}" 

出力:

mural.png_10_4 mural.png_10_6 mural.png_10_8 mural.png_12_4 mural.png_12_6 mural.png_12_8 mural.png_14_4 mural.png_14_6 mural.png_14_8 

"$x_$q_$i"ではなく、"$x"_"$q"_"$i"を使用すると変数が拡大されるのはなぜですか?

答えて

2

"_"は変数名の有効な文字です。

"${x}_${q}_$i" 
2

ループは必要ありません。 bashはあなたのために拡張を行うことができます

$ echo mural.png_{10,12,14}_{4,6,8} 

mural.png_10_4 mural.png_10_6 mural.png_10_8 mural.... 
関連する問題