shell脚本中的引用变量

时间:2017-05-17 23:59:44

标签: macos variables

我正在尝试确定Mac上的自动代理网址是否已配置。 首先,我想获得端口号

port=$(route get example.com | grep interface | sed 's/.*\(...\)/\1/')

然后使用端口号获取活动网络服务

service=$(networksetup -listnetworkserviceorder | grep $port |  sed 's/,.*$//; s/^.*: //')

最后,我使用活动网络服务获取自动代理信息

autoproxy=$(networksetup -getautoproxyurl \"$service\")

我遇到了包含空格的任何网络服务的问题。例如, Wi-Fi 工作正常,但 Apple USB以太网适配器则不然。 我认为解决方案是逃避引号(\“$ service \”) 奇怪的是,如果我回显$ service(其中$ service是 Apple USB以太网适配器),它会返回“Apple USB以太网适配器”的正确引用结果如果我然后将这个确切的结果复制并粘贴为替换变量$ service,我得到了我期望的结果( URL :( null)启用:否) 但是,运行最初编写的命令会返回参数错误(错误:参数无效)。

这是按原样运行脚本的结果:

 autoproxy=$(networksetup -getautoproxyurl "$service")
 echo $autoproxy
 Error: The parameters were not valid.

但是,如果我复制并粘贴$ service的输出,那么它会返回我期望的结果。

service=$(networksetup -listnetworkserviceorder | grep $port |  sed 's/,.*$//; s/^.*: //')
echo \"$service\"
"Apple USB Ethernet Adapter"
autoproxy=$(networksetup -getautoproxyurl "Apple USB Ethernet Adapter")
echo $autoproxy
URL: (null) Enabled: No

1 个答案:

答案 0 :(得分:0)

您正在使用""对于autoproxy表达式中的服务变量。