ベータコマンドを開始すると、次の結果が表示されます。
dda6e95c-ecd1-4c22-a8df-f118af6aff02 Mount to DZ70cd on /dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e Mount to DZ74cd on /dev/vdc
9f0d31ec-caa2-4e88-9cbd-4c82ebda5be3 Mount to DZe64c on /dev/vdc
2f3da174-1f9e-40e7-8869-563d90b103f4 Mount to DZ0d76 on /dev/vdc
次のように、bashループを介して受信した各行に対してデータ処理を実行したいと思います。
for i in `beta-command` ; do echo $i ; done ;
私は次のような結果を得ました。
dda6e95c-ecd1-4c22-a8df-f118af6aff02
Mount
to
DZ70cd
on
/dev/vda
f01e331e-0394-423f-b8ea-150f6b88029e
Mount
to
DZ74cd
on
/dev/vdc
ループが用語の代わりに行を考慮するようにどのように要求できますか?
ありがとう
答え1
設定できます内部フィールド区切り記号(IFS
)改行:
IFS=$'\n'; for i in $(beta-command) ; do echo $i; done
またはwhile
ループを使用してください。
while IFS= read -r i; do
echo $i
done < <(beta-command)
または以下を使用してくださいxargs
。
beta-command | xargs -I{} echo {}
awk
または、操作がテキスト操作に関するものである場合は、次のようにします。
beta-command | awk '{print}'
利点(?)と欠点ループを使用してコマンド出力またはファイルの各行を処理する場合これを読んでください (@Jeff Schallerに感謝)。