使用不同的分隔符时,Bash cut命令中的空格字符问题

时间:2011-06-07 15:19:52

标签: bash delimiter cut shell

我已经设置了|作为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

任何人都可以解释为什么简·布朗的太空人物造成问题?

由于 西蒙

1 个答案:

答案 0 :(得分:4)

${people[@]}括在双引号中:

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

否则,Mrs|Jane Brown将被解释为2个单独的令牌:Mrs|JaneBrown

将其视为:

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