최근 전에 본 적이없는 여러 줄 주석 유형을 발견했습니다. 다음은 스크립트 예입니다.
echo a # : aaa : ddd # echo b
이것은 작동하는 것 같습니다. 심지어 vim
구문이 강조 표시됩니다. 이 주석 스타일의 이름은 무엇이며 이에 대한 추가 정보를 찾는 방법은 무엇입니까?
주석
답변
여러 줄로 된 주석이 아닙니다. #
는 한 줄 주석입니다. :
(콜론) 은 주석이 아니라 기본적으로 기본 제공되는 쉘 내장 명령입니다. NOP , true
와 같이 true를 반환하는 것 외에 아무것도하지 않는 null 연산 (따라서 를 0으로 설정). 그러나 명령이기 때문에 인수를받을 수 있으며 인수를 무시하므로 대부분의 경우 표면적으로 주석처럼 작동합니다. 이 kludge의 주요 문제는 주장이 여전히 확장되어 의도하지 않은 결과를 초래한다는 것입니다. 인수는 여전히 구문 오류의 영향을받으며 리디렉션이 계속 수행되므로 : > file
에서 file
및 : $(dangerous command)
대체는 계속 실행됩니다.
셸 스크립트에 주석을 삽입하는 가장 안전한 방법은 #
를 사용하는 것입니다. 여러 줄로 된 주석에도이를 고수하십시오. 절대 댓글에 :
를 사용 (남용)하지 마십시오. 셸에는 C
유사 언어의 슬래시 별표 /* */
형식과 유사한 전용 여러 줄 주석 메커니즘이 없습니다.
완벽 함을 위해 권장되는 방법이 아니라 here-documents a를 사용할 수 있음을 언급하겠습니다. > 여러 줄 “댓글”수행 :
: <<"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
댓글
- 매우 중요한 +1
<<
행에 작은 따옴표를 유지하십시오. 그러면 대체 및 확장이 꺼집니다. - 추가 참고로 쉘 스크립트를
:
주석이어야하는 항목에 대해 추가 RAM / CPU 소비가 발생합니다. ' 데스크톱의 간단한 작업에는 적합하지 않지만 ' 어떤 것이 초당 수백 또는 수천 번 실행되면 ' div id = “188d9523f6″>
아무것도하지 않고 매우 빠르게 합니다.
: <<=cut
로 시작하면 쉘 스크립트에서 POD를 작성할 수 있습니다. 자세한 내용은이 예제를 참조하십시오 . 이렇게하면 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 "
이는 각 섹션을 이전하는 것보다 시간을 크게 절약합니다. 특히 주석 처리가 일시적인 경우 #
가있는 줄입니다.
댓글
- 그 단일- 인용문 주석 방법은 ' 작은 따옴표를 사용하는 스크립트 섹션에서 작동하지 않습니다.그리고 필요한만큼 가까운 곳에서 따옴표를 사용하는 경우 ' 스크립트 전체에 합법적 인 작은 따옴표가 뿌려집니다. 라인 별 주석을 차단할 수있는 괜찮은 편집기를 사용하는 것이 훨씬 더 간단합니다.
- 따옴표 섹션에 작은 따옴표가없는 경우에만 작동한다는 것이 맞습니다. 그러나 스크립트에 작은 따옴표가 많을 필요는 없습니다. 내 스크립트 중 몇 개를 살펴보면 상대적으로 드물고 많은 부분이 큰 따옴표로 대체 될 수 있습니다.
- 작은 따옴표 또는 큰 따옴표의 선택은 사소하고 관련성이없는 것에 의해 거의 영향을받지 않습니다. 스크립트의 텍스트 자체가 유효한 작은 따옴표 문자열인지 여부와 관련이 있습니다. 작은 따옴표는 확장을 방지하는 데 사용되는 반면 큰 따옴표는 특정 확장을 허용하고 추가 구문 분석이 필요합니다. 이것이 무엇을 사용할 것인지 결정하는 실제 기준입니다.
- 이것은 단연코 가장 세련된 방법입니다. 작은 문서 블록에 적합합니다.
/* */
보다 낫습니다. '<!-- -->
에서 시작하지 마세요. !
답변
댓글이 스크립트 끝에 있으면 다음과 같이 할 수 있습니다.
#!/bin/sh echo "hello world" exec true we can put whatever we want here \"\"\$\`!#%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ abcdefghijklmnopqrstuvwxyz{|}~
CommentedOutBlock() { echo "test"; }