2013-02-19 632 views
1

我想從sh腳本創建一個yaml配置文件。所以,我需要多個空格添加到這樣的一個變量:在shell腳本中給變量添加空格

SERVERS="" 
for i in $(seq 1 5); do 
    SERVERS="$SERVERS  -server`printf "%03d" $i`.$URL\n" 
done 

但空間被減少到只有一個空格。我如何確保空間不被更換?

+0

請注意,您不添加換行符到您的字符串;您要添加兩個文字字符「\」和「n」。 – chepner 2013-02-19 14:25:29

+0

我已經意識到這一點。當我通過echo「$ SERVERS」打印變量時,\ n被解釋爲一個換行符,但是當我將它存儲在一個文件中時,它只是轉儲「\ n」。我如何做一個真正的換行符? – Teots 2013-02-20 08:40:34

回答

2

我懷疑你忘了,當你迴音$SERVER用雙引號=)

SERVERS="" 
for i in $(seq 1 5); do 
    SERVERS="$SERVERS  -server$(printf "%03d" $i).$URL\n" 
done 
echo "$SERVER" 

輸出:

 -server001.\n  -server002.\n  -server003.\n  -server004.\n(...) 

那的規則(不是這樣)了不起word splitting


使用的另一種解決方案:

perl -le 'for (1..5) { print " -server$_"}' | tee -a file.yaml 

或者使用

awk 'BEGIN{for (i=1; i<=5; i++) print " -server"++c}' | 
    tee -a file.yaml 
+0

謝謝,我真的忘了添加雙引號。 – Teots 2013-02-19 18:06:34

0

那你最終做SERVERS?而不是試圖建立一個多行字符串,像這樣的東西可能會更好:

for i in $(seq 1 5); do 
    echo "  -server$(printf "%03d" $i).$URL" 
done >> file