我有一个 BASH 脚本,我想要获取附近无线网络的所有 SSID,并将它们输出到用户可以选择的菜单中。我有列出网络的部分,它们显示在菜单中,生成的 SSID 保存到变量中。
问题是,当任何网络的名称中有空格时,列表就会变得混乱。带有空格的 SSID 在whiptail 菜单中被拆分为多个条目。例如,“Test Networks Network”将是 3 个条目。任何解决此问题的帮助,将不胜感激。
有问题的代码如下所示。您会注意到我手动将“其他”添加到列表中,以便稍后手动输入 SSID。
wifiNetworkList="$(iwlist wlan0 scan | grep ESSID | awk -F \" '{print $2 ; print $2}')"
wifiNetworkList+=' Other Other'
wifiSSID=$(whiptail --notags --backtitle "PiAssist" --menu "Select WiFi Network" 20 80 10 $wifiNetworkList 3>&1 1>&2 2>&3)
最终解决方案:
wifiNetworkList=() # declare list array to be built up
ssidList=$(iwlist wlan0 scan | grep ESSID | sed 's/.*:"//;s/"//') # get list of available SSIDs
while read -r line; do
wifiNetworkList+=("$line" "$line") # append each SSID to the wifiNetworkList array
done <<< "$ssidList" # feed in the ssidList to the while loop
wifiNetworkList+=(other other) # append an "other" option to the wifiNetworkList array
wifiSSID=$(whiptail --notags --backtitle "PiAssist" --menu "Select WiFi Network" 20 80 10 "${wifiNetworkList[@]}" 3>&1 1>&2 2>&3) # display whiptail menu listing out available SSIDs
我在代码中包含了注释,以帮助解释遇到同样问题的人会发生什么。需要注意的关键事项之一是,当我们将 wifiNetworkList 提供给whiptail 时,我们必须在它周围加上引号,这给了我们"${wifiNetworkList[@]}"
.