printf 格式字符串中的变量插值与替换

Posted

技术标签:

【中文标题】printf 格式字符串中的变量插值与替换【英文标题】:Variable Interpolation vs. Substitution in printf Format String 【发布时间】:2015-12-15 11:47:10 【问题描述】:

如果您将变量放入printf(1) 格式字符串中,ShellCheck 会发出警告。为什么?

是:

printf "$file does not exist\n"

在某些方面低于:

printf "%s does not exist\n" "$file"

【问题讨论】:

SC2059 的 shellcheck wiki 条目(此处触发的警告)涵盖了这一点。 啊,不知道存在。谢谢。 【参考方案1】:

因为理论上file 变量可能有一些格式字符会导致printf 失败。这些例子会更清楚:

file='my'
printf "$file does not exist\n"
my does not exist    

file='m%y'
printf "$file does not exist\n"
-bash: printf: `y': invalid format character

根据建议它会正常工作:

printf "%s does not exist\n" "$file"
m%y does not exist

【讨论】:

以上是关于printf 格式字符串中的变量插值与替换的主要内容,如果未能解决你的问题,请参考以下文章

scala中的字符串插值

scala的插值器

C++实现txt文件中的查找与替换功能

go println与printf区别

C#6 中的长字符串插值线

选择器更改时,SwiftUI 环境变量中的字符串插值未更新