将数组内部的字符串连接到 Bash 中的另一个字符串

Concatenate String from inside an Array to another String in Bash

我有不同的 .ovpn 文件和 vpn 配置。我写了一个脚本,检查可用服务器的负载并尝试连接负载最小的服务器。 我的问题是描述 Connection NetworkManager 的字符串变量将被选择,当它们从脚本中的数组调用时 nmcli 无法识别。

我在脚本中是这样拼接和连接的:

top="${TOP_TEN[$iters]}.tcp"
nmcli con up $top --ask

这里nmcli抛出一个未知的连接错误。我之前尝试回显 $top 变量并尝试手动连接,效果很好。本例中的变量是“bg52.nordvpn.com.tcp”.

然后我又写了 4 行,看看我的连接是否有问题:

TOP_TEN=(vpn1 vpn2 bg52.nordvpn.com vpn4)
echo ${TOP_TEN[2]}.tcp
top="${TOP_TEN[2]}.tcp"
nmcli con up $top --ask

同样在这里它也工作得很好。

有人知道为什么我的 ovpn 连接在作为字符串从 bash 数组传递时无法识别吗?

如果可以帮助您更好地理解问题,这里是完整的脚本。

#!/usr/bin/bash

OVPN_FILES="/usr/lib/python3.10/site-packages/openpyn/files/ovpn_tcp"
COUNTRY_CODE=
TOP_TEN=()

function get_top_servers() {
    TOP_TEN=()
    while IFS= read -r server; do
        TOP_TEN+=( $server )
    done < <( nordvpn-server-find -n 10 -l  | tail -n 10 | tr -s " " | cut -d\  -f 1 )
}

function get_rand_ccode() {
    rand_countr_code=`ls $OVPN_FILES | cut -c1-2 | uniq | shuf | head -n 1`
}

function old_con_down() {
    ACTIVE_VPN=`nmcli c show --active | grep vpn | tr -s " " | cut -d\  -f 2`
    if [ ! -z "$ACTIVE_VPN" ]; then
        echo "Found active connection. Deactivating $ACTIVE_VPN ... "
        nmcli con down $ACTIVE_VPN
        # sleep 3
    fi
}

if [ -z "$COUNTRY_CODE" ]; then
    echo "set ccode"
    COUNTRY_CODE=$(get_rand_ccode)
fi

echo "Get Top Servers for $COUNTRY_CODE"
get_top_servers $COUNTRY_CODE

iters=0

while [ 1 ]
do  
    if (( $iters > 9 )); then
        COUNTRY_CODE=$(get_rand_ccode)
        get_top_servers $COUNTRY_CODE
        iters=0
    fi

    old_con_down
    echo "Fastest Server is ..."
    top="${TOP_TEN[$iters]}.tcp"
    echo "${TOP_TEN[@]}"
    nmcli con up $top --ask
    if [ -z $? ]; then
        exit 1
    else
        ((iters++)) 
    fi
done

我在脚本中使用的 nordvpn-server-find 也与粗体和彩色字体的控制序列相呼应。在将输出输入 nmcli.

之前,我不得不剥离它们