환경 변경이 루프의 다른 반복에 영향을 미치지 않도록 서브 쉘을 사용하고 싶지만 서브 쉘 내부에 루프 제어문 (break
, continue
)을 사용할 수 있는지 확실하지 않습니다.서브 쉘 내에서 루프 제어
#!/bin/sh
export A=0
for i in 1 2 3; do
(
export A=$i
if [ $i -eq 2 ]; then continue ; fi
echo $i
)
done
echo $A
루프 외부의 A
값은 내부에서 발생하는 어떤 영향도받지 않으며 정상입니다. 하지만 서브 쉘에 continue
을 사용할 수 있습니까? 아니면 외부로 옮겨야합니까? 기록을 위해, 그것은 쓰여진대로 작동하지만, 아마도 그것은 신뢰할 수없는 부작용입니다.
재미 있습니다. 서브 쉘은 별도의 프로세스이기 때문에 (자신의'$ BASHPID'를 가짐) 보통의 에러를 던질 것으로 기대한다 :'continue : 'for', 'while'또는 'until'loop'에서만 의미가있다. – grebneke
실제 서브 쉘은 현실에 좀 더 관여하는 어떤 것을하지만 서브 쉘의'수출 '은 전혀 무의미하다. – tripleee