我有一个名为print_code.sh的简单bash脚本,它采用文件名,并打印出带有行号的文件.
这里是:
FILE=$1
line=0;
numLines=`wc -l $FILE | sed 's/ .*$//'`
digits=`echo "l($numLines)/l(10)+1" | bc -l`
digits=`echo "0$digits" | sed 's/\..*$//'`
for i in `cat $FILE | sed 's/ /_=SPACE=_/g'`; do
line=`echo $line + 1 | bc`;
i=`echo $i | sed 's/_=SPACE=_/ /g'`;
printf "%${digits}d | %s\n" $line "$i"
done
Run Code Online (Sandbox Code Playgroud)
这是一个虚构的语言愚蠢的源文件:
var x = 1
var y = 2
var z = 3
func dostuff {
var a
var b
x = x + 1
y = y + 1
z = z + 1
a = x + y + z
b = a
}
Run Code Online (Sandbox Code Playgroud)
这是带有行号的输出:
01 | var x = 1
02 | var y = 2
03 | var z = 3
04 | func dostuff {
05 | var a
06 | var b
07 | x = x + 1
08 | y = y + 1
09 | z = z + 1
10 | a = x + y + z
11 | b = a
12 | }
Run Code Online (Sandbox Code Playgroud)
有(至少)两个官能问题print_code.sh:
而且,在某些地方它是hackish,因为我不太了解bash - 特别是用占位符= SPACE =替换空格字符,所以我们可以使用for迭代每一行.
这个代码可以被清理的最佳方式是什么,这样就不会发生hackish,并且上述功能问题会消失?
我错过了其他任何功能性问题吗?