Bash: 用三位数字输出显示 wc?

Bash: displaying wc with three digit output?

正在对目录进行字数统计。

ls | wc -l

如果输出是“17”,我希望输出显示为“017”。

我玩过 | printf 运气不佳。 如有任何建议,我们将不胜感激。

你可以使用 sed。

ls | wc -l | sed 's/^17$/017/'

这适用于所有两位数。

ls | wc -l | sed '/^[0-9][0-9]$/s/.*/0&/'

printf 是格式数字的方法:

printf "There were %03d files\n" "$(ls | wc -l)"

ls | wc -l 会告诉您它遇到了多少行 parsing the output of ls,这可能与目录中(非点)文件名的数量不同。如果文件名有换行符怎么办?获取目录中文件数的一种可靠方法是

x=(*)
printf '%03d\n' "${#x[@]}"

但这只适用于支持数组的 shell。如果您想要 POSIX 兼容的方法,请使用 shell 函数:

countargs() { printf '%03d\n' $#; }
countargs *

这是有效的,因为当 glob 扩展时,shell 维护 glob 扩展的每个成员中的单词,而不管文件名中的字符。但是,当您通过管道传输文件名时,管道另一端的命令无法判断它是普通字符串以外的任何内容,因此它无法进行任何特殊处理。