我使用的是MacOS10.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"我如何传递这些信息呢?
发布于 2012-11-03 00:57:07
问题是您希望for循环每行循环一次,而bash循环中的for循环每个参数循环一次。通过用引号将变量括起来,您可以将其复合到一个参数中。为了避免这种情况,我建议去掉for循环和变量,转而使用read和while循环:
networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/' |
while read interface; do
printf " \nFor $interface we have:\n \n" ;
networksetup -getdnsservers $interface ;
done发布于 2012-11-03 00:48:08
将IFS=$'\n'添加到开头,但不要在for循环中的变量两边添加双引号。默认情况下,输入字段分隔符包括空格和制表符。
发布于 2012-11-02 23:34:56
尝试用双引号将变量括起来:
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ;
for interface in "$servicesAre"; do
printf " \nFor $interface we have:\n \n" ;
networksetup -getdnsservers "$interface" ;
donehttps://stackoverflow.com/questions/13198215
复制相似问题