변수 값을 추출하여 다른 변수에 연결하는 방법은 무엇입니까?

변수 값을 추출하여 다른 변수에 연결하는 방법은 무엇입니까?

커널 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 

관련 정보