web-dev-qa-db-ja.com

Python)のようにzshで文字列を分割します

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
28
Olivier Verdier

解決策は、 zsh docs に示されているように、@修飾子を使用することです。

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

ちなみに、区切り文字を選択できる場合は、改行を区切り文字として使用する方がはるかに簡単で、エラーが発生しにくくなります。 zshで行を分割する正しい方法は次のとおりです。

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

ここでも引用符が必要かどうかはわかりません...

49
Olivier Verdier

これは両方のzshで機能します(setopt shwordsplitまたはzsh -y)およびBash(ゼロベースの配列):

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