非常に基本的なBashスクリプトを見てください。
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< $(ps aux)
私のコンピュータには複数のプロセスがあり、ps aux
コマンドは端末で正しく実行されます。
私はただ得る一つループ内の反復とps
コマンド出力は同じ行に提供されます。期待どおりに機能しないのはなぜですか?
答え1
bash
<バージョンでは4.4-beta
二重引用符を追加する必要があります。
#!/bin/bash
while read l
do
echo $l
echo "next one"
done <<< "$(ps aux)"
望むより:
- コマンド置換を使用すると改行文字が失われるのはなぜですか?
- ここで文字列は分割されますか?
ドキュメントで続けて言うように、Bashはもはやここで文字列拡張を分割しません。
一般的に、プロセス置換を使用する方が良いと思います。
#!/bin/bash
while read l
do
echo $l
echo "next one"
done < <(ps aux)
(問題を避けるため、使いたいかもしれませんIFS=
)。
またはより良い方法はawk
。
ps aux | awk '{print $0; print "next one"}'