1

我在尝试编写的 unix shell 脚本中遇到了一些问题,该脚本从命令行保持多个文件中的总行数。我可以单独计算行数并在每次循环中显示它们,但我的行变量总是在最后读取 0。

#! /bin/sh
lines=0

line_count(){
    #count the lines
    l= blablabla.....
    lines=`lines + l`
}

for f in "$@"
do
echo "total lines:"
( line_count "$f" )
done
4

1 回答 1

3

如果您在子shell 中运行某些东西,您所做的任何变量更改(例如增加$lines)仅在该子shell 内有效,并且在子shell 退出时丢失。但是由于您使用的是函数,因此根本不需要子shell,只需调用该函数即可。

lines=`lines + l`还将尝试lines使用参数+和执行命令,我认为这l不是您想要的。要评估表达式的结果,请使用$(( ... ))语法,并在变量前面加上$它们的值。

最后,您永远不会使用 的值$lines,您可能希望在调用该函数后打印它。

#! /bin/sh
lines=0

line_count(){
    #count the lines
    l= blablabla.....
    lines=$(( $lines + $l ))
}

for f in "$@"
do
    line_count "$f"
    echo "total lines: $lines"
done
于 2012-11-30T13:39:24.023 回答