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 docs に示されているように、@
修飾子を使用することです。
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"