2016-04-28 28 views
1

我試圖使用bash腳本的exapansion變量屬性來簡化gcc的編譯行。在bash中使用擴展連接變量

比方說,我已經定義了一個變量SRC=src/,其中包含一個源文件的文件夾,以及一個額外的變量C_SOURCES=(source1.c source2.c ...),它們自己對源文件進行計數。

如果我寫了類似"${SRC}${C_SOURCES[@]}"的結果,則只有C_SOURCES變量中的第一個值獲得SRC中的值,如:src/source1.c source2.c ...。這不是我所期望的。

我該如何改寫可變擴展行,使C_SOURCES變量中的所有值都獲得SRC變量中的值?

+0

不知道,如果它是一個錯字,但'源2.c'將數組中的兩種不同的元素,除非您報價它是 – 123

+0

是的,謝謝。 – EuGENE

+0

@SaintHax數組是一個變量。 – 123

回答

3

您可以用printf

C_SOURCES=('source1.c' 'source 2.c' 'source3.c') 

SRC='src/' 

printf "'$SRC%s' " "${C_SOURCES[@]}" 

輸出

'src/source1.c' 'src/source 2.c' 'src/source3.c' 
+1

實際上,如果我刪除'$ SRC%s'項的單引號,它對我有用。非常感謝你! – EuGENE

+0

@EuGENE不知道你想使用最終產品,所以只是調整它,以適應你的目的:) – 123

1

試試這個:

PATHS=($(for x in ${C_SOURCES[@]}; do echo "$SRC/$x"; done)) 

我選擇了包括/只是要確定。這不會處理文件名或路徑中的空格。

+0

它在'gcc'指令中似乎不起作用,因爲在'for'循環中使用'echo'會在'「$ SRC/$ x」'末尾引入換行符。但是,謝謝你的建議。 – EuGENE