최근에 나는 전에 본 적이없는 여러 줄 주석 유형을 우연히 발견했습니다-여기 스크립트 예제가 있습니다.
echo a
#
: aaa
: ddd
#
echo b
이것은 vim
구문이 강조되는 것처럼 작동하는 것처럼 보입니다 . 이 스타일의 주석은 무엇이며 이에 대한 추가 정보를 찾는 방법은 무엇입니까?
최근에 나는 전에 본 적이없는 여러 줄 주석 유형을 우연히 발견했습니다-여기 스크립트 예제가 있습니다.
echo a
#
: aaa
: ddd
#
echo b
이것은 vim
구문이 강조되는 것처럼 작동하는 것처럼 보입니다 . 이 스타일의 주석은 무엇이며 이에 대한 추가 정보를 찾는 방법은 무엇입니까?
답변:
그것은 여러 줄 주석이 아닙니다. #
한 줄 주석입니다.
:
(콜론) 은 전혀 주석이 아니라 기본적으로 NOP 인 쉘 내장 명령입니다 . 널 연산 true
( 예 : $?
부작용으로 0으로 설정)과 같이 true를 반환하지 않는 null 연산입니다 . 그러나 명령이므로 인수를 사용할 수 있으며 인수를 무시하므로 대부분 주석처럼 피상적으로 작동합니다. 이 kludge의 주요 문제점은 논증이 여전히 확장되어 의도하지 않은 결과가 발생한다는 것입니다. 인수는 여전히 리디렉션은 여전히 수행, 구문 오류에 의해 영향을 : > file
자릅니다 file
및 : $(dangerous command)
대체는 여전히 실행됩니다.
쉘 스크립트에 주석을 삽입하는 가장 놀라운 방법은입니다 #
. 여러 줄로 된 주석에도 충실하십시오. 댓글 에 (ab) 사용 하지 마십시오:
. 쉘에는 슬래시 스타 /* */
형식과 C
유사한 언어로 된 전용 다중 행 주석 메커니즘이 없습니다 .
완전성을 위해 권장되는 방법이 아니기 때문에 여기에 여러 문서 "설명"을 작성 하기 위해 여기 문서 를 사용할 수 있다고 언급 할 것입니다 .
: <<'end_long_comment'
This is an abuse of the null command ':' and the here-document syntax
to achieve a "multi-line comment". According to the POSIX spec linked
above, if any character in the delimiter word ("end_long_comment" in
this case) above is quoted, the here-document will not be expanded in
any way. This is **critical**, as failing to quote the "end_long_comment"
will result in the problems with unintended expansions described above.
All of this text in this here-doc goes to the standard input of :, which
does nothing with it, hence the effect is like a comment. There is very
little point to doing this besides throwing people off. Just use '#'.
end_long_comment
<<
.
:
RAM / CPU가 추가로 소비됩니다. 그것은 당신의 바탕 화면에 간단한 것들에 대한 이잖아요하지 않습니다하지만 만약 뭔가 두 번째는 것입니다 수백 번, 수천 실행되지 거대한 빨리 일을 할 것도, .
: <<=cut
를 작성할 수 있습니다 . 자세한 내용은이 예제를 참조하십시오 . 이것으로 사용할 수 있습니다 perldoc script.sh
. 그러나이 답변에 표시된 여러 줄 주석은 주석 블록이어야합니다 (각 줄은로 시작 #
).
어떤 스타일의 주석도 아닙니다. :
내장 명령은 절대적으로 아무것도하지 않는다; 여기에 댓글을 남용하여 남용되고 있습니다.
$ help :
:: :
Null command.
No effect; the command does nothing.
Exit Status:
Always succeeds.
초기 쉘에서는 콜론이 주석을 작성하는 유일한 방법이었습니다.
그러나 다른 명령을 구문 분석 할 때와 동일한 방식으로 행이 구문 분석되고 부작용이있을 수 있으므로 실제 주석이 아닙니다. 예를 들면 다음과 같습니다.
: ${a:=x} # assigns the value 'x' to the variable, 'a'
: $(command) # executes 'command'
(때로는 콜론이 부작용을 유발할 목적으로 만 사용되지만 주석으로 사용되지는 않습니다.)
콜론을 사용하여 스크립트 섹션을 주석 처리하는 것이 편리한 경우가 있습니다.
: '
while [ "$n" -ne "$x" ]
do
: whatever
done
'
이것은 #
주석 처리가 일시적인 경우 특히 각 행 앞에있는 시간을 크게 절약 합니다.
/* */
하고 웃어, 나를 시작하지 마십시오 <!-- -->
!
CommentedOutBlock() { echo "test"; }