使用 Bash printf,我不知道如何理解以下代码的语法。
echo $(printf "%0.s../" 2 );
# ../
echo $(printf "%0.s../" );
# ../
echo $(printf "%0.s../" 1 );
# ../
Run Code Online (Sandbox Code Playgroud)
读取自man printf,
...
s
打印字符串参数中的字节,直到到达末尾或达到精度规范指示的字节数;但是,如果精度为 0 或缺失,则会完整打印字符串。...
而且我仍然不知道上面的代码。
为什么下面的代码会重复打印?
# repeating character
echo $(printf "%0.s../" 1 2 );
# ../../
Run Code Online (Sandbox Code Playgroud)
从https://wiki.bash-hackers.org/commands/builtin/printf看到
...
。点:与字段宽度一起,当文本较长时,字段不会扩展,而是会被截断。“%.s”是“%.0s”的未记录等效项,它将强制字段宽度为零,从而有效地从输出中隐藏该字段
...
还没拿到。我需要一些解释。
这个例子可以阐明宽度字段的工作原理
printf '%.0s../\n' ABCDEFG
../
printf '%.1s../\n' ABCDEFG
A../
printf '%.2s../\n' ABCDEFG
AB../
printf '%.7s../\n' ABCDEFG
ABCDEFG../
Run Code Online (Sandbox Code Playgroud)
当宽度为 0 时,则根本不打印该字段。
然后,如果参数多于字段,printf则重复格式
printf '%.7s../\n' ABCDEFG abcdefg
ABCDEFG../
abcdefg../
Run Code Online (Sandbox Code Playgroud)