如何在 printf 中传递变量

How to pass variable within printf

我正在尝试在 printf 中回显一个变量。我首先使用下面的命令提示用户输入

printf 'Specify lrus [default 128]:         ' ;read -r lrus

接下来它会再次提示用户查看他是否想要上一个问题中使用的输入:

printf 'Are you sure you want $lrus lrus:       ' ;read -r ans

例如,输出如下所示:

Specify lrus [default 128]:     60
Are you sure you want 60 lrus:  yes

上面的输出是我试图实现的,允许使用 printf 将上一个输入变量传递给下一个问题。

你可以试试这个;

printf 'Are you sure you want '${lrus}' lrus:       ' ;read -r ans

printf "Are you sure you want ${lrus} lrus:       " ;read -r ans

你的问题是你使用了单引号。单引号内不展开参数。

参数用双引号展开,但是:

printf "Are you sure you want $lrus lrus: "

请注意,不需要单独打印;最好使用 read-p 参数(一方面,它了解您的终端宽度):

read -p "Specify lrus [default 128]: " -r lrus
read -p "Are you sure you want $lrus lrus? " -r ans

使用 printf 时,请使用格式说明符。在你想要你的值去的地方放一个%s,然后把值放在下一个参数中:

printf 'Are you sure you want %s lrus:       '  "$lrus"
read -r ans

这比使用双引号将变量注入 printf 格式字符串更安全、更健壮。如果您使用双引号,您将无法写出包含例如100%:

$ var='100%'; printf "Value is $var"
bash: printf: `%': missing format character

$ var='100%'; printf "Value is %s" "$var"
Value is 100%

根据the SC2059

Don't use variables in the printf format string. Use printf "..%s.." "$foo".

您可以使用:

printf "Are you sure you want %s lrus: " "$lrus"