アイテムに空白を含めることができるリストを反復処理する方法を教えてください。
x=("some word", "other word", "third word")
for word in $x ; do
echo -e "$word\n"
done
強制的に出力する方法:
some word
other word
third word
それ以外の:
some
word
(...)
third
word
アイテムを適切にループするには、を使用する必要があります${var[@]}
。また、スペースのあるアイテムが分割されていないことを確認するために、引用符で囲む必要があります"${var[@]}"
。
すべて一緒に:
x=("some word" "other word" "third word")
for word in "${x[@]}" ; do
echo -e "$word\n"
done
または、saner(Charles Duffyに感謝)printf
:
x=("some word" "other word" "third word")
for word in "${x[@]}" ; do
printf '%s\n\n' "$word"
done
2つの可能な解決策。1つは余分な「、」を含まないfedorquiの解決策に似ており、もう1つは配列のインデックス付けを使用しています。
x=( 'some word' 'other word' 'third word')
# Use array indexing
let len=${#x[@]}-1
for i in $(seq 0 $len); do
echo -e "${x[i]}"
done
# Use array expansion
for word in "${x[@]}" ; do
echo -e "$word"
done
出力:
some word
other word
third word
some word
other word
third word
編集:cravooriによって指摘されたインデックス付きソリューションの問題を修正しました