在 bash 中使用 printf 时,是否总是需要提供格式字符串,如下所示。
printf "" "V01 Oct 2021"
或者printf "V01 Oct 2021"
还是可以的?
答案1
我强烈建议您使用格式字符串printf
。例如,
printf '%s' 'V01 Oct 2021' # V01 Oct 2021
如果您使用空格式字符串,您将得到空结果,因为没有打印参数的指令:
printf '' 'V01 Oct 2021' # (nothing)
在下一种情况下,由于您的字符串不包含任何格式控制字符,因此您可以仅使用不带参数值的格式字符串:
printf 'V01 Oct 2021' # V01 Oct 2021
但是,如果您要插入变量,则应该绝不进入格式字符串,以防万一它以-
或包含%
或字符(或编码包含大多数实现(包括 bash 的内置实现)\
的编码的其他字符)。例如,%
\
printf
d=5; a="Increase by $d%"
printf "$a" # -bash: printf: `%': missing format character
printf "$a\n" # -bash: printf: `\': invalid format character
printf '%s\n' "$a" # Increase by 5%
printf 'Increase by %d%%\n' "$d" # Increase by 5%
请注意,在第二个示例中,它\n
本身并不是无效的,但%
末尾的符号$a
令人困惑printf
。