2014-03-30 57 views
1

我想將一些參數放入變量f.e.如何將命令行參數保存在變量中並將它們傳遞給命令

CFLAGS=-c --sysroot=$sysroot 

但bash抱怨說它找不到文件--sysroot ...爲什麼?我怎樣才能把這個參數放入變量中,並將它們傳遞給程序。

此外,我想這樣做:

for dir in ${include_dirs[*]}; 
do 
    CFLAGS=$CFLAGS "-I$dir" 
done 

但如預期那樣也不能正常工作。

編輯:一種解決方案

CFLAGS=("-c" "--sysroot=$sysroot") 

,並在環

CFLAGS=("${CFLAGS[0]}" "-I$dir") 

我想知道是否有可能是一個比較明顯的解決方案。

+0

'--sysroot'錯誤後的'...'部分是什麼? – beroe

+0

我將其他部分添加到變量 – SACO

+0

您幾乎第一次做對了。只需要2次更改。 'CFLAGS =「 - c --sysroot == $ sysroot」',並在循環中'CFLAGS =「$ CFLAGS -I $ dir」'。由於在爲變量分配值時存在空格,因此您的原始發佈會在兩個地方都會發生。通過將引號內的空格括起來,問題就解決了。 – alvits

回答

3

在外殼的報價是非常重要的這樣:

CFLAGS="-c --sysroot=$sysroot" 

否則Bash將它解釋爲2個不同的說法。

或者您可以使用數組來存儲它:

CFLAGS=("-c" "--sysroot=$sysroot") 

,並隨後將如:

"${CFLAGS[@]}" 

非常重要引述陣列擴展。

+0

如果我做CFLAGS =「 - c --sysroot = $ sysroot」執行循環並調用gcc $ CFLAGS,它會輸出未知參數「-c --sysroot ....」,如果我執行第二個建議,循環將會不行。 – SACO

+1

還是讓我找到正確的解決方案,看問題。 – SACO

+1

欲瞭解更多詳情:[我試圖把一個命令放在一個變量中,但複雜的情況總是失敗!](http://mywiki.wooledge.org/BashFAQ/050) –

相關問題