カーネル2.6.xの使用
前の質問を完成する解決策は次のとおりです。値の1つをスキップしながら変数を繰り返すには?。
2つの変数から位置ごとの値を抽出し、それらを同じ場所の3番目の値に連結するにはどうすればよいですか?
このオペレーティングシステムでは、sh以外のシェルがEntware-NGパッケージとしてインストールされ、スクリプトの実行後にロードされるため、使用できません。したがって、ソリューションは、スクリプトの実行時に使用できる唯一のシェルであるPosix shに基づいている必要があります。
たとえば、次の変数を使用します。
NETID="10 20 30"
NAME="eth1 eth2 eth3"
...次の値を使用して3番目の変数を作成します。
NETS="eth1:10 eth2:20 eth3:30"
答え1
sh
-only答えを好むかもしれません。 POSIXシェルで使用する方法は次のとおりです。
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
)
構造により、$(...)
すべてがサブシェルで発生し、親シェルのパラメータは影響を受けません。
答え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