循环处理空格和换行符的终端

时间:2016-08-16 06:59:11

标签: for-loop terminal escaping

所以在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

任何人都知道如何让列表输出原始语法?我想通过将echo命令替换为:

来编写输出脚本以关闭IPv6堆栈
sudo networksetup -setv6off "$n";

1 个答案:

答案 0 :(得分: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脚本的全新可能性。