2014-05-20 30 views
0

我的命令是這樣的:頭部上單行輸出的文本,而不換行符

df=$(echo `df -h | head -3`) 
echo $df 

我希望它顯示第一三行df -h輸出作爲這樣:

Filesystem  Size Used Avail Use% Mounted on 
/abc/asdf  16G 5.6G 9.4G 38%/
abcd   1.9G 12K 1.9G 1% /dev 

相反,它輸出這樣的:

Filesystem Size Used Avail Use% Mounted on /abc/asdf 16G 5.6G 9.4G 38%/abcd 1.9G 12K 1.9G 1% /dev 
  • 如何我可以確保echo $df在shell腳本中輸出換行符嗎?
  • 什麼導致echo忽略head的換行符?
+1

爲什麼你認爲它只輸出前兩行?我看到了標題行,'/'和'/ dev'。 – Barmar

+0

你是對的,我誤解了我自己的輸出。我編輯了我的帖子以反映真實的問題。 – bvpx

回答

4

引用變量,以防止分詞:時

echo "$df" 

99%,當你使用它們,你應該引用變量。如果你真的希望他們受到分詞和通配,只能使用未加引號的變量。在某些情況下,不需要引號(例如​​),但多餘的引號不會受到傷害。

我只是notieced,你也在$()內使用echo。我不知道爲什麼,但你也需要有引號:

df=$(echo "`df -h | head -3`") 

但你並不需要回音,你可以這樣寫:

df=$(df -h | head -3) 
+1

@bvpx use __df = $(df -h | head -3)__ –

+0

我明白了,我把它放在我的答案中。 – Barmar

+1

當你第一次發表評論,我以爲你只是改變'$('反引號,然後我看到你實際上寫了什麼,所以我刪除了我的評論。 – Barmar

1

你需要設置IFS變量。

$ df=$(IFS=$''; echo `df -h | head -3`) 
$ echo $df 
Filesystem  Size Used Avail Use% Mounted on 
/dev/sda3  15G 4.2G 9.7G 31%/
devtmpfs  1010M  0 1010M 0% /dev 
$ 
相關問題