このコードのエクスポートはどのようなことをしますか?

このコードのエクスポートはどのようなことをしますか?

存在するTLDPスクリプトのWebページ分析、分析のために次のコードを提供します。

export SUM=0
for f in $(find src -name "*.java"); do
    export SUM=$(($SUM + $(wc -l $f | awk '{ print $1 }')))
done
echo $SUM

私が理解したところは、ディレクトリ内のすべての* .javaファイルの行数の合計を計算しますsrc。私が理解していないのはキーワードを使用する理由ですexportそう説明した:

エクスポートコマンドは、実行中のスクリプトまたはシェルのすべての子プロセスで変数を使用できるようにします。

子プロセスは決してアクセスしないので、SUMエクスポートするのはなぜですか?

ベストアンサー1

私が理解したところによれば、srcディレクトリにあるすべての* .javaファイルの行合計を計算します。

これは必ずしも完全に本当ではありません。*.javaディレクトリツリーにルートがあるすべてのファイルsrc(つまり、すべてのサブディレクトリ)srcの行数の合計を計算します。しかしスペースを含んで.java

SUMは子プロセスからアクセスできないため、エクスポートする理由はありますか?

いいえ。

このプロセス中にファイル名を安全にするために、次のコードスニペットを作成できます。

find src -type f -name '*.java' -exec wc -l {} \; | awk '{ s += $1 } END { print s }'

より良い解決策は次のとおりです。

find src -type f -name '*.java' -exec cat {} + | wc -l

おすすめ記事