私は次のように出力my_commandを行の配列にグループ化すると思いました:
IFS='\n' array_of_lines=$(my_command);
その結果は、$array_of_lines[1]出力の最初の行を参照することになるmy_command、$array_of_lines[2]等々第二に、そして。
ただし、上記のコマンドはうまく機能しないようです。で確認したようにmy_command、文字の周りの出力も分割するようです。私もこれをチェックしました:nprint -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:ドキュメントに