2

設定しました| コマンドの区切り文字になりますがcut、スペース文字も区切り文字として解釈されるようです。

これが私のテストスクリプトです:

people[1]="Mr|Smith"
people[2]="Mrs|Jane Brown"

for person in ${people[@]}
do
    title=$(echo $person | cut -f1 -d\|)
    name=$(echo $person | cut -f2 -d\|)
    echo $title $name
    echo
done

どの出力:

Mr Smith

Mrs Jane

Brown Brown

ジェーンブラウンのスペースキャラクターが問題を引き起こしている理由を誰かが明らかにすることができますか?

ありがとうサイモン

4

1 に答える 1

4

${people[@]}二重引用符で囲みます:

for person in "${people[@]}"
...

それ以外の場合は、Mrs|Jane Brown2つの別個のトークンとして解釈されます:Mrs|JaneおよびBrown

それを次のように考えてください:

for i in "a b c"; do echo $i; done # echoes "a b c" just once

for i in a b c; do echo $i; done # does an echo for a, b and c
于 2011-06-07T15:23:54.697 に答える