所以在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";
答案 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脚本的全新可能性。