我想從sh腳本創建一個yaml配置文件。所以,我需要多個空格添加到這樣的一個變量:在shell腳本中給變量添加空格
SERVERS=""
for i in $(seq 1 5); do
SERVERS="$SERVERS -server`printf "%03d" $i`.$URL\n"
done
但空間被減少到只有一個空格。我如何確保空間不被更換?
我想從sh腳本創建一個yaml配置文件。所以,我需要多個空格添加到這樣的一個變量:在shell腳本中給變量添加空格
SERVERS=""
for i in $(seq 1 5); do
SERVERS="$SERVERS -server`printf "%03d" $i`.$URL\n"
done
但空間被減少到只有一個空格。我如何確保空間不被更換?
我懷疑你忘了,當你迴音$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的另一種解決方案:
perl -le 'for (1..5) { print " -server$_"}' | tee -a file.yaml
或者使用awk:
awk 'BEGIN{for (i=1; i<=5; i++) print " -server"++c}' |
tee -a file.yaml
謝謝,我真的忘了添加雙引號。 – Teots 2013-02-19 18:06:34
那你最終做SERVERS
?而不是試圖建立一個多行字符串,像這樣的東西可能會更好:
for i in $(seq 1 5); do
echo " -server$(printf "%03d" $i).$URL"
done >> file
請注意,您不添加換行符到您的字符串;您要添加兩個文字字符「\」和「n」。 – chepner 2013-02-19 14:25:29
我已經意識到這一點。當我通過echo「$ SERVERS」打印變量時,\ n被解釋爲一個換行符,但是當我將它存儲在一個文件中時,它只是轉儲「\ n」。我如何做一個真正的換行符? – Teots 2013-02-20 08:40:34