为什么要使用 printf '%s ’“消息”?

问题描述 投票:0回答:3
if [[ -z "$usr_name" ]]; then
   printf '%s\n' "No input entered"
   exit 1

'%s\n'
的含义是什么以及为什么要添加它而不是仅仅使用:

printf "No input entered"
bash shell scripting
3个回答
3
投票

这是一种防御性编程技术,希望防止格式字符串包含意外指令或参数数量与格式字符串不匹配的错误。此外,将字符串放入参数中可以减少不必要的转义。 (比较

printf '20%%\n'
printf '%s\n' '20%'
)它还使读者更容易查看格式,有助于防止忘记尾随换行符的错误。

底线:这是一个风格决定。之间没有功能差异:

printf '%s\n' 'No input entered'

printf 'No input entered\n'

2
投票

printf 用于格式化和打印数据。如果是:

printf '%s\n' "No input entered"

%s 表示后面的空格分隔字符串的字符串占位符和“ " 代表换行。

%s 将替换“未输入任何内容”,后跟换行符。


1
投票

使用像这样的固定且漂亮的字符串,没有太大区别。

但是如果数据来自变量,您会想要使用

printf "%s\n", "$var"

不是在格式字符串中扩展变量,而是为了防止变量本身包含格式说明符(如

%s
)的可能性,以破折号开头,这将被视为一个选项。

例如在重击中:

$ 变量=%s
$ printf "$var
”

$ var=-foo
$ printf "$var
”
bash: printf: -f: 无效选项
printf:用法:printf [-v var] 格式[参数]

这是第一个

printf
输出的空行,因为没有参数可用于填充
%s
。在第二个中,错误消息应该解释它。

© www.soinside.com 2019 - 2024. All rights reserved.