정말 어리석은 질문이 있지만 확실히 확인하고 싶었습니다. 또한 다음 코드를 사용하여 내부적으로 테스트했습니다.
for x in ${!test_array[@]}
do
echo hey
done
그래서 내 질문은 분명히 for
배열이 비어 있으면 루프는 "실행 중"과 "완료" 사이의 모든 항목을 무시한다는 것입니다. 테스트했는데 배열이 비어 있으면 echo hey
실행되지 않습니다. 즉, 스크립트는 do ..
및 내부에서 아무 작업도 수행하지 않습니다 done
. 배열에 요소가 하나 이상 있으면 배열이 실행됩니다 echo hey
.
내 이해가 맞는지 확인하고 싶습니다. 내 테스트에 따르면 확실히 그렇습니다.
답변1
당신의 이해가 정확합니다. for 루프는 do
와 사이의 코드를 실행합니다.done
~을 위한모든 항목성격. 안에 아무것도 없으면성격그러면 순환할 일이 없습니다.
하지만 생략하면말로전반적으로 위치 매개변수를 통해 반복됩니다.
예를 들어
$ set -- one two
$ for f; do echo $f; done
one
two
바라보다3.2.5.1 루프 구조
답변2
네, 맞습니다. 이렇게 생각해보세요. 당신이 어린이 파티에 있었고 파란색 셔츠를 입은 모든 아이들이 쿠키를 받아야 한다고 내가 말했다면, 파란색 셔츠를 입은 아이들이 없다면 당신은 절대 쿠키 병을 열지 않을 것입니다.
여기에서는 배열의 각 요소에 대해 어떤 작업을 수행하도록 쉘에 지시합니다. 요소가 없기 때문에 루프에 들어가지도 않습니다.