首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash for循环使用带空格的变量

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

Stack Overflow用户
提问于 2012-11-02 23:24:06
回答 3查看 5.4K关注 0票数 4

我使用的是MacOS10.7.x,需要询问网络服务以报告针对服务定义了哪些接口,以及针对每个接口设置了哪些dns服务器。

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

我的问题是接口的初始变量列表中的空格:

代码语言:javascript
复制
"USB Ethernet"  
"Display Ethernet"  
"Wi-Fi"  
"Bluetooth PAN"

我如何传递这些信息呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-03 00:57:07

问题是您希望for循环每行循环一次,而bash循环中的for循环每个参数循环一次。通过用引号将变量括起来,您可以将其复合到一个参数中。为了避免这种情况,我建议去掉for循环和变量,转而使用read和while循环:

代码语言:javascript
复制
networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/' |
while read interface; do 
    printf " \nFor $interface we have:\n \n" ; 
    networksetup -getdnsservers $interface ; 
done
票数 4
EN

Stack Overflow用户

发布于 2012-11-03 00:48:08

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

票数 8
EN

Stack Overflow用户

发布于 2012-11-02 23:34:56

尝试用双引号将变量括起来:

代码语言:javascript
复制
servicesAre=`networksetup -listallnetworkservices | tail -n +2 | sed 's/.*/"&"/'` ; 
for interface in "$servicesAre"; do 
      printf " \nFor $interface we have:\n \n" ; 
      networksetup -getdnsservers "$interface" ; 
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13198215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档