2016-05-10 14 views
0

私はこのようなコードを持っているBashのスコープの問題変数をインクリメントするとき

A.TXTが欠落しています最後の改行は、問題の#1

B.TXTは最後の改行、問題の#1

私はこれをどのように修正することができますが不足していますか?以前のインクリメントが無視されたかのように、0が1にインクリメントされるため、スコープの問題のように見えます。

+1

質問には関係ありませんが、ファイル名に空白が含まれているとコードが失敗します。二重引用符を使用するともっと安全です: 'tail -c1" $ file "'。 – cdarke

+0

@cdarke:良い点!私の実際のユースケースでは、スペースを許さないより具体的なglobを使用していますが、これは将来この質問への訪問者にとって有用なはずです。 :) – Charles

答えて

1

カッコ内に埋め込まれたコマンドはサブシェルとして実行されます。ループ内の各サブシェルは、親レベル(n = 0)に設定されたnの値で開始されます。

括弧を中括弧に変更するだけです(端末のセミコロンまたは改行が必要です)。

+0

それはそれです!このようなシンプルなことを見逃して、それを見つけていただきありがとうございます。 – Charles

+0

または、ただ一つのコマンドを使用してください: '... || echo "$ fileに最後の改行がありません。#$((++ n))" – rici

関連する問題