Строка разделения с zsh как в Python

В Python:

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
27
задан Olivier Verdier 18 June 2014 в 06:51
поделиться

2 ответа

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

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

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

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

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

53
ответ дан 28 November 2019 в 04:46
поделиться

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

s="1::3"
saveIFS="$IFS"
IFS=':'
a=(${s})
IFS="$saveIFS"
8
ответ дан 28 November 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: