Разделить строку с 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
Ответы
Ответ 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"