쉘 스크립트에서 배열 사용

쉘 스크립트에서 배열 사용

웹사이트 경로를 배열로 저장하려고 하는데 문제가 있습니다.

for 루프 내에서 작동합니다. 배열의 내용을 에코하면 올바르게 인쇄됩니다.

그런데 If/Else 내에서 배열의 특정 부분을 다른 변수에 저장해 보았지만 작동하지 않았습니다. 배열의 특정 부분을 에코하면 아무것도 인쇄되지 않습니다.

코드는 다음과 같습니다.

#! /bin/sh

SITES=()
i=0

for d in /var/www/sites/*/;
do (
    PATHWAY=$d
    SITES+=($PATHWAY)
    echo "$i: $PATHWAY"
);  let "i++"
done

read -p 'Enter the number of the website you want to restore. Enter "exit" to quit. ' url

if [ "$url" = "exit" ]
then
    exit 0

else
    RESTORE_URL=${SITES[url]}
fi

답변1

select다음은 문을 사용하기에 좋은 곳인 것 같습니다 .

select path in /var/www/sites/* EXIT; do
    if [[ "EXIT" = "$path" ]]; then
        exit 0
    else
        : do stuff here referencing $path
    fi
done

답변2

귀하의 루프(내 들여쓰기 포함):

for d in /var/www/sites/*/; do
    (   PATHWAY=$d
        SITES+=($PATHWAY)
        echo "$i: $PATHWAY"  )

    let "i++"
done

루프 본문의 대부분이 서브셸에 어떻게 있는지 확인하세요. 즉, 이러한 변수에 대한 변경 사항은 이 서브셸 외부에서 볼 수 없으며 루프가 반복될 때마다 재설정됩니다.

Ether를 사용하여 변경 (...)하거나 {...;}완전히 제거합니다.

전체 스크립트에 대한 더 나은 대안은 다음 select과 같이 사용하는 것입니다.돕고티는 설명한다.

관련 정보