awk 返回时转义 & 符号
escaping ampersand when returned by awk
我正在使用
echo $(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep "SSID:" | grep -v "BSSID" | awk '{=""; print [=10=]}'
获取 zsh 提示符的 wifi 名称。
它适用于标准名称,但如果名称有任何非标准字符,即 'B&Q_Public' 它只会 returns B 然后说
(eval):1: command not found: Q
有什么建议
首先,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 }'
备注:
- 字段分隔符设置为
': '
,值将始终为 </code>。</li>
<li>在<code>SSID:
之前有space,这样可以防止与BSSID:
匹配的行。
- 这里不用运行
grep
两遍,awk
撑起来就好了
这里的任何地方都没有 eval
成为 运行,所以我认为仅此行不会产生您显示的错误。
我正在使用
echo $(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep "SSID:" | grep -v "BSSID" | awk '{=""; print [=10=]}'
获取 zsh 提示符的 wifi 名称。
它适用于标准名称,但如果名称有任何非标准字符,即 'B&Q_Public' 它只会 returns B 然后说
(eval):1: command not found: Q
有什么建议
首先,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 }'
备注:
- 字段分隔符设置为
': '
,值将始终为</code>。</li> <li>在<code>SSID:
之前有space,这样可以防止与BSSID:
匹配的行。 - 这里不用运行
grep
两遍,awk
撑起来就好了
这里的任何地方都没有 eval
成为 运行,所以我认为仅此行不会产生您显示的错误。