2016-08-16 27 views
1

所以在OSX上,我跑:終端循環處理空格和換行

networksetup -listallnetworkservices | tail -n +2 

它例如得出:

Built-in Ethernet 
Wi-Fi 
Thunderbolt Ethernet 
iPhone USB 

如果我運行:

for n in $(networksetup -listallnetworkservices | tail -n +2); do echo $n; done 

我得到:

Built-in 
Ethernet 
Wi-Fi 
Thunderbolt 
Ethernet 
iPhone 
USB 

這是不好的,因爲for命令用換行符替換空格。所以,如果我添加引號,然後運行:

for n in "$(networksetup -listallnetworkservices | tail -n +2)"; do echo $n; done 

我得到根本沒有換行...

Built-in Ethernet Wi-Fi Thunderbolt Ethernet iPhone USB 

任何人知道如何獲取列表輸出原始語法?我想腳本輸出關掉IPv6堆棧,通過用替換echo命令:

sudo networksetup -setv6off "$n"; 

回答

1

for循環遍歷由空格分隔元件在IFS變量定義。您可以按以下方式刪除空格字符:

(IFS=''; for f in `networksetup -listallnetworkservices | tail -n +2`;do echo $f;done) 

一個更好的選擇可能是使用一個while循環:

networksetup -listallnetworkservices | tail -n +2 | while read f; do echo $f; done 

運行help read會向你介紹一套全新的shell腳本的可能性。