有程序aaaa 參數為 --add "aa bb"
現需要將所有參數用變量代替程序如下:
temp="--add "aa bb""
aaaa $temp
提示參數出錯bb"
手工執行aaaa --add "aa bb" 可以
需要這麼轉換???
to houf2000:
很明顯,你的程序aaaa需要兩個參數,一個是--add($1) 一個是aa bb ($2)
因為aa bb中間含空格,shell會解釋成兩個參數,所以加""
而你使用替換的時候,shell對命令行的解釋工作便只作了變量替換,你的程序便獲得了
三個參數:--add($1) ,"aa ($2) ,bb"($3
個人認為,一個好的程序在考慮用戶輸入的時候,應該具體些.
比如說:考慮三個參數
或考慮使用特殊字符間隔兩個參數,如
aaaa --add aa#bb
非常感謝斑竹,可我的程序比較特殊,可能輸入多組參數:例如;
aaaa --add "aa bb" --add "cc dd" --add "ff"
因為參數不確定,總需要得到一個參數字符串,而對這個串進行
操作時就會出現斑竹所說的認為多參數的情況,用“ 的目的就是這個,
沒有別的辦法在參數中帶有空格嗎?望指教
在參數間加空格是一個問題,而shell運行變量替代是另一個問題.
如果單純是加空格,用" " 和都可以.
而要讓shell做完變量替換在做一次對""和的處理便做不到了.
通常在其它情況下我們用eval,在這好像也不適用啊.
如果你有aaaa的源碼,還是把它改了吧.在c裡把#替換成空格不是很簡單麼?