回答:
これを試してください:
$ printf '%s\n' "${my_array[@]}"
違い$@と$*:
引用されていない、結果は不特定です。Bashでは、どちらも展開して引数を分離し、次にワードスプリットとグロブ化を行います。
引用され、"$@"各要素を個別の引数として"$*"
展開しますが、1つの引数にマージされた引数に展開します"$1c$2c..."(はのc最初の文字ですIFS)。
あなたはほとんど常に欲しいです"$@"。同じことが当てはまります"${arr[@]}"。
常に引用してください!
| grep -v '^$'ますか?
引数を引用してエコーするだけです:
( IFS=$'\n'; echo "${my_array[*]}" )
サブシェルは、使用後のIFSの復元に役立ちます
IFS=$'\n' echo "${my_array[*]}"機能しません。しかたがない!
echoはBashに組み込まれているため、機能しないと思います。ただし、これを関数にラップして機能させることはできます。gist.github.com/steshaw/53ba0095bce8ccab52d26a14375dedb8
使用する:
for each in "${alpha[@]}"
do
echo "$each"
done
履歴を使用する; 値に以下が含まれている場合、これは失敗することに注意してください!。
history -p "${alpha[@]}"
basenameを使用します。値に以下が含まれている場合、これは失敗することに注意してください/。
basename -a "${alpha[@]}"
shufを使用します。結果が順番に出ない場合があることに注意してください:
shuf -e "${alpha[@]}"
私は巨大なfor ... ifループでここで答えを試しましたが、喜びは得られませんでした。
# EXP_LIST2 is iterated
# imagine a for loop
EXP_LIST="List item"
EXP_LIST2="$EXP_LIST2 \n $EXP_LIST"
done
echo -e $EXP_LIST2
それはリストにスペースを追加しましたが、それは問題ありません-私はそれを少しインデントしたかったです。また、「\ n」が元の$ EP_LISTに出力されると想定します。
もう1つの便利なバリエーションは、次のパイプですtr。
echo "${my_array[@]}" | tr ' ' '\n'
これはシンプルでコンパクトに見えます
my_array=( "one two" three )
4+、使用していたecho "${my_array[@]}" | tr '' ' \n'個人的に私は使用を避けたいものの、echoどこ、そのようにtr私の選択は私のようなものだと思うtr '' ' \n' <<<"${my_array[@]}"後で読むために少し簡単かもしれませんが。