while [ -n "$1" ]; 로 시작하는 루프는 언제 수행됩니까? 실행?

while [ -n "$1" ]; 로 시작하는 루프는 언제 수행됩니까? 실행?

다음으로 시작하는 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

... 분명히 스크립트의 기능에 따라 다릅니다.

관련 정보