在 bash 中使用 printf

在 bash 中使用 printf

在 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

相关内容