Проблемы с символом пробела в команде Bash Cut при использовании другого разделителя - PullRequest
2 голосов
/ 07 июня 2011

Я установил | быть разделителем для команды 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

Может кто-нибудь пролить свет на то, почему символ пробела в Джейн Браун вызывает проблемы?

Спасибо Simon

1 Ответ

4 голосов
/ 07 июня 2011

Заключите ${people[@]} в двойные кавычки:

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

В противном случае Mrs|Jane Brown будет интерпретироваться как 2 отдельных токена: 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
...