有了wc
,我得到一行行数,然后是文件名:
$ wc -l ./lpm/modelisator.py
426 ./lpm/modelisator.py
$
我尝试进行 printf 格式:
$ do_stuff() { printf "lines: %sn" `wc -l $1` ;}
$
$ do_stuff ./lpm/modelisator.py
lines: 426
lines: ./lpm/modelisator.py
$
我很想知道为什么我会得到这两行:
顺便说一句,使用文件作为标准,我得到了我想要的:
$ do_stuff() { printf "lines: %sn" `cat $1 |wc -l` ;}
$ do_stuff ./lpm/modelisator.py
lines: 426
$
只需将n
替换为<space>
或t
例如:
## <space> as delimiter
do_stuff() { printf "lines: %s " `wc -l $1` ;}
## <tab> as delimiter
do_stuff() { printf "lines: %st" `wc -l $1` ;}
当你调用wc -l filename
时,它会在行数旁边输出文件名。当命令替换没有用双引号括起来时,它会进行分词,即如果它有任何空格,则会扩展到多个单词。最后,printf
一遍又一遍地使用该格式,直到它消耗所有给定的参数。
比如,假设file
里面有 10 行,那么
printf 'lines: %sn' `wc -l file`
与
printf 'lines: %snlines: %sn' '10' 'file'
因此,请改为这样做:
printf 'lines: %sn' "$(wc -l <"$1")"