커널 2.6.x 사용
이전 질문을 완성하는 해결책은 다음과 같습니다.값 중 하나를 건너뛰면서 변수를 반복하는 방법은 무엇입니까?.
두 변수에서 위치별 값을 추출하고 이를 동일한 위치의 세 번째 값으로 연결하는 방법은 무엇입니까?
이 운영 체제에서는 sh가 아닌 쉘이 Entware-NG 패키지로 설치되며 스크립트가 실행된 후에 로드되므로 사용할 수 없습니다. 따라서 솔루션은 스크립트가 실행될 때 사용할 수 있는 유일한 셸인 Posix sh를 기반으로 해야 합니다.
예를 들어 다음 변수를 사용합니다.
NETID="10 20 30"
NAME="eth1 eth2 eth3"
...다음 값을 사용하여 세 번째 변수를 만듭니다.
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