パラメータ拡張でZshに\ nを解釈させる方法

パラメータ拡張でZshに\ nを解釈させる方法

私はそれを使用しています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

おすすめ記事