在 bash 中不使用格式字符串打印文本

printing text without use of format string in bash

一直在 printf "text" 从 bash 脚本打印一些文本。使用没有格式字符串的 printf 是否有效?

将整个消息放入格式字符串中是合理的做法,前提是它不包含任何动态数据。只要您可以完全控制字符串(即,它要么只是一个固定字符串,要么是从一组固定字符串中选择的一个,或者类似的东西),并且您已经使用该控件来确保它不包含任何意外的转义字符,其中的所有 % 字符都加倍(使它们成为文字,而不是格式说明符),并且字符串不以 -.

开头

基本上,如果它是一个固定的字符串并且没有明显失败,它将始终如一地工作。

但是如果它包含任何类型的动态数据——文件名、user-entered 数据,任何类似的东西——你应该将格式说明符放在格式字符串中,并将动态数据放在单独的参数中。

所以这些都可以:

printf 'Help, Help, the Globolinks!\n'
printf 'Help, Help, the %s!\n' "$monster_name"

但这不是:

printf "Help, Help, the $monster_name!\n"    # Don't do this