如何提取变量值并将其连接到另一个变量中?

如何提取变量值并将其连接到另一个变量中?

使用内核 2.6.x

这是为了完成上一个问题的解决方案 -如何在跳过其中一个值的同时迭代变量?

如何从两个变量中按位置提取一个值,并将它们连接成具有相同位置的第三个值?

在此操作系统上,非 sh shell 作为 Entware-NG 包安装,并且无法使用,因为它们在脚本运行后加载。因此,该解决方案需要基于 Posix sh,因为它是脚本运行时唯一可用的 shell。

例如,使用以下变量...

NETID="10 20 30"
NAME="eth1 eth2 eth3"

...并使用以下值创建第三个变量。

NETS="eth1:10 eth2:20 eth3:30"

答案1

您可能更喜欢sh-only 答案。下面是与 POSIX shell 一起使用的一个:

NETS=$(set -- $NETID; for iface in $NAME; do echo "$iface:$1"; shift; done)

评论版本:

NETS=$(
    set -- $NETID            # Sets the shell parameters to the content of NETID
    for iface in $NAME; do   # For each interface name...
        echo "$iface:$1"
        shift                # First shell parameter is now the next NETID, if any
    done
)

请注意,由于$(...)结构的原因,一切都发生在子 shell 中,并且父 shell 的参数不受影响。

答案2

NETID="10 20 30"
NAME="eth1 eth2 eth3"

NETS=$(awk -v name="$NAME" -v netid="$NETID" '
BEGIN {
    size=split(name, arr_names); 
    split(netid, arr_netids);
    for(i=1; i <= size; i++) {
        printf "%s:%s ", arr_names[i], arr_netids[i];
    }
}')

echo "$NETS"

输出

eth1:10 eth2:20 eth3:30 

相关内容