웹사이트 경로를 배열로 저장하려고 하는데 문제가 있습니다.
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
과 같이 사용하는 것입니다.돕고티는 설명한다.