2016-11-10 42 views
0

我想在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下一个问题。

+1

使用双引号:'printf“...”' – sat

+0

工程。谢谢 –

回答

3

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

参数在双引号扩大,虽然:

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

注意,有没有必要单独的打印;最好是使用-p参数read(即了解您的终端宽度,一两件事):

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

你可以试试这个;

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

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

当使用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%