''に関して、BSD系での罠があったのでそれについて。wcと言うコマンドがあります。fileとするとファイルの行数、ワード数、文字数を表示してくれます。-lオプションを使えば行数だけ表示。(共に最後にファイル名も出ます。-l1の様に2行に渡る出力も1になっています。これはwcが最後の改行の数を数えているからで、上だと改行が一つなので1になります。"abc"なら0になります。上の様にコマンドの出力とかを数えようとすると間違えてしまうことがあります。そこで、grepの行を数える-cオプションを使った方法がより直感的に出来ます。これで全ての行が該当することになり出力が全行数になります。''2の様な形で数えられます。調べると問題が起きる事に気づきました。''$と、空の場合には何も出力してくれません。-l0$と当然両方共0を返してくれます。その場合0行になる可能性があると問題が出るわけです。BSD系で絶対に使わないスクリプトなら良いのですが、そうでない場合なんとかしないといけません。nlines=0fiの様にしておけば取り敢えずは大丈夫です。スマートではないです。^0としてあげるとBSDのgrepでも0を出してくれます。^は行頭の表す正規表現です。$0と、行末を表す$を使ってもいけます。これは中々気付かないところでした。$?0$とすると正常終了(0)になっています。仕様というよりバグな感じがします。^などを使った方が良い、ということです。