Bil*_*ill 6 shell bash quoting
我有一个我似乎无法弄清楚的问题..我正在制作一个脚本,我将在 OSX 中运行以帮助我保持连接以打开 wifi 热点。我正在将所有周围的 wifi 网络读入一个 muntiline 变量。这些 wifi 网络的名称中有时会有空格,这对我来说是一个问题。我想遍历这个包含空格的多行变量,并将每一行按原样添加到新的数组单元格中。在下面添加我的代码。谁能帮我解决这个问题?
#Looks for available networks
netarray=(`airport -s |
awk '$NF=="NONE"{print}' |
cut -c 1-32,51-54 |
sort -r -n -k 1.34,1.36 |
awk '{$NF=""; print}' |
sed -e 's/ $//' `)
#Test text added here
echo "netarray below"
echo "$netarray"
echo "cell 0 below"
echo ${netarray[0]}
echo "cell 1 below"
echo ${netarray[1]}
echo ""
#Until here
Run Code Online (Sandbox Code Playgroud)
这给了我这个输出(见 TPE Free 被切割):
netarray below
TPE Free HP-Print-93-LaserJet 1102
cell 0 below
TPE
cell 1 below
Free
Run Code Online (Sandbox Code Playgroud)
机场 -s 目前给了我这个输出:
SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
fuck this 00:1f:1f:27:e4:ac -79 11 N -- WEP
BigA2 34:08:04:c3:9a:14 -85 11 N US WPA(PSK/AES,TKIP/TKIP) WPA2(PSK/AES,TKIP/TKIP)
TPE Free 78:cd:8e:a6:ff:30 -90 10 N T9 NONE
CHT3826 b0:b2:dc:c3:91:77 -82 11 Y -- WPA2(PSK/AES/AES)
KK 00:e0:4c:ac:e1:05 -84 11 N -- WEP
perfectidea f8:1a:67:53:eb:da -79 9,-1 Y -- WPA2(PSK/AES/AES)
tfb_18_28 b0:c7:45:ac:18:98 -87 7,+1 Y -- WPA2(PSK/AES,TKIP/TKIP)
HP-Print-93-LaserJet 1102 08:3e:8e:7c:04:93 -86 6 N -- NONE
SG-OFFICE 74:d0:2b:dc:67:64 -80 6 Y -- WPA2(PSK/AES/AES)
holo15 b8:55:10:bd:3e:70 -82 5,-1 Y -- WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
TOTOLINK N300RA 78:44:76:dd:bb:b4 -82 5,+1 Y -- WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
ezstay 15F-28 78:44:76:dc:f1:a0 -85 2,+1 Y KR WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
12F-32 20:10:7a:9f:d9:c1 -59 1 Y -- WPA(PSK/AES,TKIP/TKIP)
Run Code Online (Sandbox Code Playgroud)
awk on airport 命令只是删除开放网络的名称并将它们放在不同的行中。
您应该在for-in循环中引用netarray。
for hit in "${netarray[@]}"
do
networks[$addloopnr]="$hit"
let addloopnr++
done
Run Code Online (Sandbox Code Playgroud)
mapfile -t ssids < <(
airport -s |
sed -E '
1d
/NONE$/!d
s/^[[:blank:]]*(.+) [[:xdigit:]:]{17} (...).*/\2 \1/
' |
sort -k1,1nr |
cut -d " " -f2-
)
printf "%s\n" "${ssids[@]}"
Run Code Online (Sandbox Code Playgroud)
HP-Print-93-LaserJet 1102
TPE-Free
Run Code Online (Sandbox Code Playgroud)
针对 bash v3 进行调整
ssids=()
while read -r line; do ssids+=("$line"); done < <(
airport -s |
sed -E '
1d
/NONE$/!d
s/^[[:blank:]]*(.+) [[:xdigit:]:]{17} (...).*/\2 \1/
' |
sort -k1,1nr |
cut -d " " -f2-
)
printf "%s\n" "${ssids[@]}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |