グループコマンドによる標準出力のリダイレクト
複数のコマンドの出力を同じファイルに出力する場合、グループコマンドの使用が推奨される。
例えば以下のように2つのコマンドが標準出力に出力する場合:
echo foo >> test.txt
echo bar >> test.txt
グループコマンド({})で以下のようにまとめてリダイレクトできる。
{
echo foo
echo bar
} >> test.txt
ファイルアクセス回数
グループコマンドを使用すると、ファイルへのアクセス回数を減らせる。
- 個別リダイレクト: コマンドごとに開いて追記
- グループコマンド: ファイルを1回だけ開いて追記
可読性
グループコマンドを使用すると、場合によってはコードをより簡潔にできる。
例えば以下のように複数のコマンドが同じファイルに出力する場合:
command1 >> file.txt
command2 >> file.txt
command3 >> file.txt
...
上記のように書くと同じファイル名が繰り返されて冗長となる。
グループコマンドを使用すると、以下のようにまとめて書ける。
{
command1
command2
command3
} >> file.txt
ShellCheckによる推奨
ShellCheckでも複数コマンドが標準出力に出力する場合はグループコマンドの仕様を推奨している。
» ShellCheck: SC2129
SC2129: Consider using { cmd1; cmd2; } >> file instead of individual redirects.
while, forブロックでも使える
whileブロックやforブロックもグループコマンドと同様にまとめてリダイレクトできる。
ファイルを読み込みながら結果をまとめて出力する場合:
while read line; do
echo "Processing: $line"
done < input.txt >> output.txt
forで連番を生成してファイルに出力する場合:
for i in {1..5}; do
echo "Number: $i"
done >> numbers.txt
\第一線のプログラマーの行動原理を学べる!/