bash函数中的printf向"wC语言 l"结果添加新行



有了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")"

最新更新