我在Mac OS 10.7.x上,需要询问网络服务以报告针对服务定义哪些接口,并且每个dns服务器都针对每个服务。
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ;
for interface in $servicesAre ; do
printf " nFor $interface we have:n n" ;
networksetup -getdnsservers $interface ;
done
我的问题是接口的初始变量列表中的空间:
"USB Ethernet"
"Display Ethernet"
"Wi-Fi"
"Bluetooth PAN"
我如何通过?
将 IFS=$'n'
添加到开始时,但不要在for循环中的变量周围添加双引号。默认情况下,输入字段分离器包括空格和选项卡。
问题是,您希望每行循环一次循环,但每一个参数一次bash循环中的循环。通过将您的变量封闭在报价标记中,您将其复合到一个参数中。为了避免这种情况,我建议抛弃for循环和变量,然后使用 read
,而又一次循环:
networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/' |
while read interface; do
printf " nFor $interface we have:n n" ;
networksetup -getdnsservers $interface ;
done
尝试用双引号封装变量:
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ;
for interface in "$servicesAre"; do
printf " nFor $interface we have:n n" ;
networksetup -getdnsservers "$interface" ;
done