回答:
これを試してください:
$ 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[@]}"
後で読むために少し簡単かもしれませんが。