当awk返回时,转义与号

时间:2018-10-16 07:34:29

标签: bash awk zsh ampersand

我正在使用 echo $(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep "SSID:" | grep -v "BSSID" | awk '{$1=""; print $0}' 获取zsh提示符的wifi名称。

它可以与标准名称配合使用,但是如果名称包含任何非标准字符,即“ B&Q_Public”,则仅返回B,然后显示

(eval):1: command not found: Q

任何建议

1 个答案:

答案 0 :(得分:2)

首先,airport实用程序的漫长道路非常笨拙。让我们做一个符号链接。

sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/bin/airport

假设这样的程序输出(基于我以this为例的某种搜索):

     agrCtlRSSI: -76
     agrExtRSSI: 0
    agrCtlNoise: -92
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 24
        maxRate: 54
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: c0:3e:f:2f:c3:ad
           SSID: B&Q_Public
            MCS: -1
        channel: 4

并且仅获得B&Q_Public(SSID)的预期结果,使用单个awk命令就足够了:

airport -I | awk -F ": " '/ SSID:/{print $2}'

注意:

  • 字段分隔符设置为': ',这些值将始终位于$2中。
  • SSID:前面有空格,这会阻止该行与BSSID:匹配。
  • 这里grep不需要运行两次,awk可以正常运行。

这里没有eval正在运行,因此我认为仅此行不会产生您所显示的错误。