如何在printf中传递变量

Chr*_*ten 1 unix linux shell aix

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

printf 'Specify lrus [default 128]:         ' ;read -r lrus
Run Code Online (Sandbox Code Playgroud)

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

printf 'Are you sure you want $lrus lrus:       ' ;read -r ans
Run Code Online (Sandbox Code Playgroud)

例如,输出将如下所示:

Specify lrus [default 128]:     60
Are you sure you want 60 lrus:  yes
Run Code Online (Sandbox Code Playgroud)

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

tha*_*guy 6

使用时printf,请使用格式说明符。将 a%s放在您想要值的位置,然后将该值放在下一个参数中:

printf 'Are you sure you want %s lrus:       '  "$lrus"
read -r ans
Run Code Online (Sandbox Code Playgroud)

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

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

$ var='100%'; printf "Value is %s" "$var"
Value is 100%
Run Code Online (Sandbox Code Playgroud)


Tob*_*ght 5

您的问题是您正在使用单引号。参数不会在单引号内扩展。

但是,参数会用双引号引起来:

printf "Are you sure you want $lrus lrus: "
Run Code Online (Sandbox Code Playgroud)

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

read -p "Specify lrus [default 128]: " -r lrus
read -p "Are you sure you want $lrus lrus? " -r ans
Run Code Online (Sandbox Code Playgroud)