Подтвердить что ты не робот

Разделить строку с 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
4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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