![while [ -n "$1" ]; 로 시작하는 루프는 언제 수행됩니까? 실행?](https://rvso.com/image/146500/while%20%5B%20-n%20%22%241%22%20%5D%3B%20%EB%A1%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EB%A3%A8%ED%94%84%EB%8A%94%20%EC%96%B8%EC%A0%9C%20%EC%88%98%ED%96%89%EB%90%A9%EB%8B%88%EA%B9%8C%3F%20%EC%8B%A4%ED%96%89%3F.png)
다음으로 시작하는 while 루프가 있는 쉘 스크립트가 있습니다.
while [ -n "$1" ]; do
나는 그것이 $1
스크립트 이름 바로 뒤에 있는 인수, 즉 를 firstargument
실행할 때를 참조한다는 것을 알고 있습니다 ./myscript.sh firstargument
. 무엇을 합니까 -n
?
답변1
-n
비어 있지 않은 문자열에 대한 테스트입니다 .
빈 문자열로 확장 되면 "$1"
해당 특정 테스트가 실패하고 루프가 실행되지 않습니다.
그것은~할 것 같은루프의 본문에는 shift
다음 위치 매개변수를 로 이동하는 명령문이 포함되어 $1
있으며 이러한 방식으로 루프는 빈 인수를 찾거나 인수 목록의 끝에 올 때까지 스크립트에 대한 인수를 반복합니다.
이 test
유틸리티는 와 동일 [
하지만 [
마지막 인수가 이어야 합니다 ]
.
테스트는 다음과 같이 작성할 수도 있습니다.
while test -n "$1"; do
[
및 둘 다 test
셸에 내장되어 있을 가능성이 높지만 /bin
.
man test
이 테스트와 다른 테스트에 대한 자세한 내용 은 셸과 내장 유틸리티인 셸 설명서에서 읽을 수 있습니다 .
이것-n
테스트도 그 중 하나입니다.기준테스트를 수행하므로 다음 항목에도 나열되어 있습니다.POSIX 표준test
유틸리티.
만약에이 루프는 반복되어야 합니다모두인수가 비어 있으면 이를 수행하지 못할 수 있습니다.
$ sh -c 'while [ -n "$1" ]; do printf "arg: %s\n" "$1"; shift; done' sh 1 2 3 "" 4 5 6
arg: 1
arg: 2
arg: 3
대신에 다음과 같은 것을 사용해야 할 수도 있습니다.
for arg do
if [ -n "$arg" ]; then
# do something with "$arg"
fi
done
... 분명히 스크립트의 기능에 따라 다릅니다.