2016-11-10 126 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%