使用内核 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