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시험도 그 중 하나에요기준테스트를 수행하므로 다음 항목에도 나열됩니다.test유틸리티용 POSIX 표준.


만약에이 사이클은 끝나야 한다모두인수가 비어 있으면 이 작업을 수행하지 않을 수 있는 쉘 스크립트에 대한 인수:

$ 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

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

관련 정보