Bash printf:如何理解零点s(“0.s”)语法
使用BashBash printf:如何理解零点s(“0.s”)语法,bash,syntax,Bash,Syntax,使用Bashprintf,我不知道如何理解下面代码的语法 echo $(printf "%0.s../" 2 ); # ../ echo $(printf "%0.s../" ); # ../ echo $(printf "%0.s../" 1 ); # ../ 从man printf中读取 s 字符串参数中的字节将一直打印到结束 达到或直到达到精度规格指示的字节数;但是,如果精度为0 或丢失,字符串将全部打印 我仍然不知道上面的代码 为什么下面的代码会重复打印 # repe
printf
,我不知道如何理解下面代码的语法
echo $(printf "%0.s../" 2 );
# ../
echo $(printf "%0.s../" );
# ../
echo $(printf "%0.s../" 1 );
# ../
从man printf中读取
s字符串参数中的字节将一直打印到结束 达到或直到达到精度规格指示的字节数;但是,如果精度为0 或丢失,字符串将全部打印 我仍然不知道上面的代码 为什么下面的代码会重复打印
# repeating character
echo $(printf "%0.s../" 1 2 );
# ../../
从表面上看
。点:与字段宽度一起,文本较长时字段不会展开,而是截断文本。“%.s”是“%.0s”的未记录等效项,它将强制字段宽度为零,从而有效地将字段隐藏在输出之外
还没拿到。我需要一些解释。此示例可能会阐明宽度字段的工作原理
printf '%.0s../\n' ABCDEFG
../
printf '%.1s../\n' ABCDEFG
A../
printf '%.2s../\n' ABCDEFG
AB../
printf '%.7s../\n' ABCDEFG
ABCDEFG../
当宽度为0时,则根本不打印该字段
然后,如果参数多于字段,printf
重复该格式
printf '%.7s../\n' ABCDEFG abcdefg
ABCDEFG../
abcdefg../
您遇到的是一个典型问题,即格式说明符少于
printf "%0.s../" 1 2
Bash将说明符规则与参数一对一地应用,但是在不正确匹配的情况下,说明符规则基本上被复制,就好像它的运行方式一样
printf "%0.s../../" 1
您需要为2添加一个额外的说明符
printf "%0.s..%0.s/" 1 2
在这种情况下,只要格式规则匹配,就可以得到一个。/
输出
至于语法%0.s
,它似乎正在截断您所提到的参数字符串。逻辑的唯一问题是上面解释的不正确的说明符。在外壳中打印长值时,宽度字段更有意义,其中的精度由宽度字段控制。例如
printf '%4.2f\n' 1323.343233
1323.34
哪个printf()
理解为您有一个由点前面的4位数字和最大2位精度数字组成的数字
首先,您不需要echo
输出printf()
。可以在末尾使用格式说明符\n
打印换行符
printf "%0.s..%0.s/\n" 1 2
看见