Разделить строку с Zsh, как в Python - PullRequest
25 голосов
/ 28 мая 2010

В питоне:

s = '1::3'
a = s.split(':')
print a[0] # '1' good
print a[1] # '' good
print a[2] # '3' good

Как мне добиться того же эффекта с zsh?

Следующая попытка не удалась:

string="1::3"
a=(${(s/:/)string})
echo $a[1] # 1
echo $a[2] # 3 ?? I want an empty string, as in Python

Ответы [ 2 ]

48 голосов
/ 28 мая 2010

Решением является использование модификатора @, как указано в в документах zsh :

string="1::3"
a=("${(@s/:/)string}") # @ modifier

Кстати, если у вас есть выбор разделителя, гораздо проще и менее подвержен ошибкам использовать новую строку в качестве разделителя. Правильный способ разбить строки с помощью zsh:

a=("${(f)string}")

Не знаю, нужны ли здесь и кавычки ...

8 голосов
/ 28 мая 2010

Это будет работать как в zsh (с setopt shwordsplit или zsh -y), так и в Bash (массивы с нулями):

s="1::3"
saveIFS="$IFS"
IFS=':'
a=(${s})
IFS="$saveIFS"
...