2016-04-28 5 views
1

私はgccのコンパイル行を簡略化しようとしていますが、bashスクリプトの展開変数のプロパティを使用しています。bashで拡張を使って変数を連結する

ソースファイルのフォルダを含む変数SRC=src/を定義し、ソースファイル自体を追加する変数C_SOURCES=(source1.c source2.c ...)を定義したとします。

私は"${SRC}${C_SOURCES[@]}"ような何かを記述する場合、結果はC_SOURCES変数内の最初の値のみがそう、SRCに値を取得することです:src/source1.c source2.c ...。それは私が期待したものではありません。

C_SOURCES変数のすべての値がSRCの変数になるように、変数展開で行を書き直す方法を教えてください。私は念のために/を含めることにしました

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

+0

が分からないのですが、 'ソース2.c'は、アレイ内の2つの異なる要素になるのprintfを使用することができますそれ – 123

+0

ありがとうございます。 – EuGENE

+0

@SaintHax配列は変数です。 – 123

答えて

3

あなたが引用しない限り、それはタイプミスであれば

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

はこれを試してみてください。これにより、ファイル名やパスに適切なスペースが含まれているとは扱えません。

+0

'' for'ループで 'echo'を使うと' '$ SRC/$ x" 'の最後に改行文字が導入されるので、' gcc'命令ではうまくいかないようです。しかし、あなたの助言に感謝します。 – EuGENE

関連する問題