存在する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