在TLDP 的 Analyzing Scripts 网页中,提供了以下代码用于分析:
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
关键字的原因,如下所述:
export 命令为正在运行的脚本或 shell 的所有子进程提供可用的变量。
由于SUM
子进程从未访问过,因此有什么理由导出它吗?
这不一定是完全正确的。它计算
*.java
根目录树src
(即src
及其所有子目录)中所有文件的行数之和。但对于任何包含空格的文件路径或目录名称以.java
.不。
我可能会编写这样的代码片段,使其在过程中文件名安全:
一个更好的解决方案可能是这样的:
你是对的,这里没有必要使用
export
。不过,这段代码还有更多问题:在脚本中使用小写变量名是一种很好的做法,请参阅 this for an explanation。
一般来说,不推荐使用 tldp.org,请参阅 this或 this。我还看到有人在 StackExchange 上不推荐 tldp.org。