我在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
答案 0 :(得分:2)
如果你在子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