使用带空格的变量进行bash for循环

时间:2012-11-02 15:24:06

标签: macos bash for-loop spaces

我使用的是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"

如何通过?

3 个答案:

答案 0 :(得分:7)

IFS=$'\n'添加到开头,但不要在for循环中的变量周围添加双引号。输入字段分隔符默认包含空格和制表符。

答案 1 :(得分:3)

问题是你希望for循环每行循环一次,但是每个参数一次循环bash循环。通过将变量括在引号中,可以将其合并为一个参数。为避免这种情况,我建议放弃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

答案 2 :(得分:1)

尝试用双引号括起变量:

servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ; 
for interface in "$servicesAre"; do 
      printf " \nFor $interface we have:\n \n" ; 
      networksetup -getdnsservers "$interface" ; 
done