在python中:
s = '1::3'
a = s.split(':')
print a[0] # '1' good
print a[1] # '' good
print a[2] # '3' good
Run Code Online (Sandbox Code Playgroud)
我怎样才能达到同样的效果zsh?
以下尝试失败:
string="1::3"
a=(${(s/:/)string})
echo $a[1] # 1
echo $a[2] # 3 ?? I want an empty string, as in Python
Run Code Online (Sandbox Code Playgroud)
Oli*_*ier 53
解决方案是使用@修饰符,如zsh文档中所示:
string="1::3"
a=("${(@s/:/)string}") # @ modifier
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果一个人可以选择分隔符,那么使用换行符作为分隔符会更容易且更不容易出错.然后使用zsh分割线条的正确方法是:
a=("${(f)string}")
Run Code Online (Sandbox Code Playgroud)
我不知道报价是否也是必要的......
这将在zsh(带setopt shwordsplit或zsh -y)和Bash(从零开始的数组)中工作:
s="1::3"
saveIFS="$IFS"
IFS=':'
a=(${s})
IFS="$saveIFS"
Run Code Online (Sandbox Code Playgroud)