私は次のように出力my_command
を行の配列にグループ化すると思いました:
IFS='\n' array_of_lines=$(my_command);
その結果は、$array_of_lines[1]
出力の最初の行を参照することになるmy_command
、$array_of_lines[2]
等々第二に、そして。
ただし、上記のコマンドはうまく機能しないようです。で確認したようにmy_command
、文字の周りの出力も分割するようです。私もこれをチェックしました:n
print -l $array_of_lines
echo $array_of_lines[1]
echo $array_of_lines[2]
...
2回目の試みでは、追加するeval
ことが役立つと考えました:
IFS='\n' array_of_lines=$(eval my_command);
しかし、それがない場合とまったく同じ結果が得られました。
最後に、zshにスペースがあるList要素に関する回答に続いてIFS
、入力を分割して要素を配列に収集する方法をzshに指示する代わりに、パラメーター拡張フラグを使用することも試みました。
array_of_lines=("${(@f)$(my_command)}");
しかし、私はまだ同じ結果を得ました(分割が起こっていますn
)
これに関して、次の質問があります。
Q1。何で「適切な」行の配列内のコマンドの出力を収集する方法は?
Q2。IFS
改行のみで分割するように指定するにはどうすればよいですか?
Q3。上記の3番目の試み(つまりを使用@f
)でパラメータ拡張フラグを使用して分割を指定する場合、zshはIFS
?の値を無視しますか?なぜそれが上で機能しなかったのですか?
"${(@f)...}"
はと同じですが、${(f)"..."}
方法が異なります。(@)
二重引用符の内側は「配列要素ごとに1つの単語を生成する」ことを意味し、「(f)
改行で配列に分割する」ことを意味します。PS:ドキュメントに