고려 사항: 명령은 쉘 스크립트에서 명시적으로 아무 작업도 수행하지 않습니다. 무슨 소용이 있습니까?

고려 사항: 명령은 쉘 스크립트에서 명시적으로 아무 작업도 수행하지 않습니다. 무슨 소용이 있습니까?

대답으로쉘 스크립트의 주석에 관한 이 질문, 이는 :명시적으로 아무 작업도 수행하지 않는 빈 명령임을 나타냅니다(그러나 주석에는 사용되지 않음).

아무것도 하지 않는 명령이 무슨 소용이 있겠습니까?

답변1

나는 일반적으로 true루프에서 사용하는 것이 더 명확하다고 생각합니다.

while true; do
    ...
done

이 기능이 정말 유용하다고 생각하는 곳 중 하나 :는 일치해야 하는 항목이 있지만 실제로는 아무 작업도 수행하고 싶지 않은 경우의 사례 설명입니다. 예를 들어:

case $answer in
    ([Yy]*) : ok ;;
    (*)     echo "stop."; exit 1 ;;
esac

답변2

처음에는 C 컴파일 프로그램이 아니라 Bourne 쉘 프로그램인지 확인하는 데 사용되었습니다. 이것은 shebang과 다양한 스크립트 언어(csh, perl) 이전이었습니다. 다음 스크립트를 계속 실행할 수 있습니다 :.

$ echo : > /tmp/xyzzy
$ chmod +x /tmp/xyzzy
$ ./xyzzy

$SHELL일반적으로 (or) 에 대해 스크립트를 실행합니다 /bin/sh.

그 이후로 주요 용도는 매개변수를 평가하는 것이었습니다. 나는 아직도 다음을 사용한다:

: ${EDITOR:=vim}

스크립트에서 기본값을 설정합니다.

답변3

:내부에서 종료되어야 하는 루프를 작성하는 데 유용합니다.

while :
do
    ...stuff...
done

이는 break또는 가 호출되지 않거나 exit쉘이 종료 신호를 받지 않는 한 영원히 실행됩니다.

답변4

# 문자 외에도 나는 줄을 일시적으로 주석 처리하기 위해 이 문자를 사용한 적이 있습니다. 이 경우 줄을 주석 처리하면 빈 명령 시퀀스를 허용하지 않는 셸 구문의 결함으로 인해 구문 오류가 발생합니다.

if condition ; then
    :# temporarily commented out command
fi

그렇지 않은 경우 명령 시퀀스가 ​​누락될 수 있으며 이는 구문 오류입니다.

관련 정보