私はそれを使用していますZshパラメータ拡張フラグ文字列を配列に分割します。
これは働きます:
string="one
two"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
これはうまくいきません:
string="one\ntwo"
array=("${(f)string}")
echo "${array[1]}"
# Returns:
# one
# two
\n
拡張を改行文字として解釈するにはどうすればよいですか?
答え1
マニュアルzshexpn
ではこれらの作業に取り組んでいます。 1つのオプションはe
パラメータ拡張フラグ((f)
分割と同じ部分)ですが、e
複数の操作(パラメータ拡張、コマンド置換、および算術拡張)は生成されたリテラルの一部として実行されます\n
。それともこのすべての操作が起こりたいですか?
% string="a\nb" ; print -l ${(f)${(e)string}}
a
b
むしろ、g
組み込みのechoによって処理されるエスケープシーケンスのみを処理します。
% string="a\nb" ; array=( ${(f)${(g::)string}} ) ; print $array[2]
b
リテラルにのみ分割する方が正確です\n
。
% string="a\nb" ; print -l ${(s.\\n.)string}
a
b