はじめに コマンドの出力をパイプ + while read ループで処理した時にループの中の変数がループの外で使えない(変数の中身が空になっている)という問題の解決方法の紹介です。これも何番煎じかのネタだと思いますが、良くない解決方法が目につき、あまり紹介されてないテクニックもあるので、それらの情報をすべてまとめ、何がどういう理由で駄目なのか?良い方法とはなにか?を解説するのがこの記事の趣旨です。推奨 5 パターン(+非推奨 3 パターン)の解決方法を解説しています。 パイプ・サブシェル問題とは? 以下のような問題です。 #!/bin/sh total=0 seq 10 | while IFS= read -r line; do echo "$line" total=$((total + line)) done echo "$total" # 1 + 2 + ... + 10 = 55 と