2017-02-11 42 views
2

我需要傳遞更多的原始參數,我也想添加其他一些參數。事情是這樣的:追加bash參數並傳遞給其他腳本

#!/bin/bash 
params="-D FOREGROUND" 
params+=" -c Include conf/dev.conf" 

/usr/local/apache/bin/apachectl $params "[email protected]" 

這上面的代碼按預期如果params包含兩個或多個參數不工作,它視爲一個參數。

+0

我編輯了我的問題。 'params'作爲單個參數對待 – SLY

+0

在上面的例子中,我希望'params'被視爲兩個參數+一些$ @參數 – SLY

回答

4

如果當正好寫成這樣在命令行中執行下面的命令是有效的在您的示例代碼應工作:

/usr/local/apache/bin/apachectl -D FOREGROUND -c Include conf/dev.conf "[email protected]" 

快速的Web搜索使我認爲,你想要的是這個(注意附加雙引號):

/usr/local/apache/bin/apachectl -D FOREGROUND -c "Include conf/dev.conf" "[email protected]" 

這裏是如何做到這一點簡單,可靠地使用數組,在迴避「引號裏的引用」問題的方式:

#!/bin/bash 
declare -a params=() 
params+=(-D FOREGROUND) 
params+=(-c "Include conf/dev.conf") 

/usr/local/apache/bin/apachectl "${params[@]}" "[email protected]" 

params array包含4個字符串("-D""FOREGROUND""-c""Include conf/dev/conf")。數組擴展("${params[@]}",注意雙引號在這裏很重要)將它們擴展爲這4個字符串,就好像你用雙引號將它們寫在它們周圍(即沒有進一步的字分割)。

使用這種擴展的數組是一種靈活可靠的方式來構建命令,然後通過簡單的擴展來執行它們。

0

如果問題是參數「-c Include conf/dev.conf」中的空格,那麼您可以使用退格鍵來保留空格字符: params + =「 - c Include \ conf/dev.conf」