2012-03-29 26 views
0

我使用下面的代碼爲什麼空行不獲取存儲在變量

#! /bin/bash 
for host in $(cat ./server.txt) 
do 
    echo "$host" 

done 

server.txt包含:

 server1.com 
    server2.com 

    server3.com 


    server4.com 

但上面的代碼是給下面的輸出:

 server1.com 
    server2.com 
    server3.com 
    server4.com 

即它沒有考慮到空行。我該如何解決這個問題?

回答

5
while read host; do echo "$host"; done < server.txt 

使用您提供的代碼,將文件作爲單個字符串作爲for命令的第4個參數。然後,shell將字符串分隔爲任意空格作爲分隔符(假設您尚未更改IFS變量)。

+0

它沒有得到最後line.ie server4.com – Monojit 2012-03-29 19:24:19

+0

你也設置'IFS'第一:'IFS =「\ n」'但我同意使用'read'可能會更好。 – paulmelnikow 2012-03-29 19:24:35

+0

@grails_enthu,您的文件是否在最後一行缺少換行符? – 2012-03-29 19:27:57

1

空行不存在,因爲它們被認爲是用於分隔單詞值的空格。

使用本:

的awk '{打印$ 1}' server.txt

server1.com 
server2.com 

server3.com 


server4.com 
+0

你的意思是「用於分隔*字符*的空白」 – 2012-03-29 19:29:13

+0

打印不是這裏主要關心的問題,我需要將值存儲在變量中。 – Monojit 2012-03-29 19:29:17

+0

glenn。謝謝,你是對的。我的意思是說價值觀,而不是變數。我現在編輯它。 grails,謝謝你指出的區別。我沒有意識到你只想在shell環境中使用變量。 – johnshen64 2012-03-29 20:00:46

0

替代

s=$(cat -E ./server.txt) 
while [ ${#s} != 0 ] 
do 
    echo ${s%%\$*} 
    s=${s#*\$} 
done 
相關問題