В 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
Решение состоит в том, чтобы использовать модификатор @
как указано в документах zsh :
string="1::3"
a=("${(@s/:/)string}") # @ modifier
Между прочим, если у кого-то есть выбор разделителя, гораздо проще и менее подвержено ошибкам использовать новую строку в качестве разделителя. Правильный способ разделить строки с помощью zsh:
a=("${(f)string}")
Я не знаю, нужны ли здесь кавычки ...
Это будет работать как в zsh (с setopt shwordsplit
или zsh -y
]), так и в Bash (массивы с нулевым отсчетом):
s="1::3"
saveIFS="$IFS"
IFS=':'
a=(${s})
IFS="$saveIFS"