6

アイテムに空白を含めることができるリストを反復処理する方法を教えてください。

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
4

2 に答える 2

7

アイテムを適切にループするには、を使用する必要があります${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
于 2013-01-29T17:04:50.193 に答える
2

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によって指摘されたインデックス付きソリューションの問題を修正しました

于 2013-01-29T17:25:31.657 に答える