여러 줄 셸 스크립트 주석-어떻게 작동합니까?

최근 전에 본 적이없는 여러 줄 주석 유형을 발견했습니다. 다음은 스크립트 예입니다.

echo a # : aaa : ddd # echo b 

이것은 작동하는 것 같습니다. 심지어 vim 구문이 강조 표시됩니다. 이 주석 스타일의 이름은 무엇이며 이에 대한 추가 정보를 찾는 방법은 무엇입니까?

주석

  • 대신 코드를 함수로 래핑하면 어떻게됩니까? 주석 처리 하시겠습니까? CommentedOutBlock() { echo "test"; }
  • 다른 사람들이 이미 언급했듯이 여러 줄 주석은 기본적으로 사용할 수 없습니다. 그래서 나는 거짓이면 사용합니다. 그런 다음 < 원하는 줄 수 > fi

답변

여러 줄로 된 주석이 아닙니다. #는 한 줄 주석입니다. : (콜론) 은 주석이 아니라 기본적으로 기본 제공되는 쉘 내장 명령입니다. NOP , true와 같이 true를 반환하는 것 외에 아무것도하지 않는 null 연산 (따라서 를 0으로 설정). 그러나 명령이기 때문에 인수를받을 수 있으며 인수를 무시하므로 대부분의 경우 표면적으로 주석처럼 작동합니다. 이 kludge의 주요 문제는 주장이 여전히 확장되어 의도하지 않은 결과를 초래한다는 것입니다. 인수는 여전히 구문 오류의 영향을받으며 리디렉션이 계속 수행되므로 : > file에서 file: $(dangerous command) 대체는 계속 실행됩니다.

셸 스크립트에 주석을 삽입하는 가장 안전한 방법은 #를 사용하는 것입니다. 여러 줄로 된 주석에도이를 고수하십시오. 절대 댓글에 :를 사용 (남용)하지 마십시오. 셸에는 C 유사 언어의 슬래시 별표 /* */ 형식과 유사한 전용 여러 줄 주석 메커니즘이 없습니다.


완벽 함을 위해 권장되는 방법이 아니라 here-documents 여러 줄 “댓글”수행 :

: <<"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″>

아무것도하지 않고 매우 빠르게 합니다.

  • @bahamat : 수백 가지를 실행하는 경우 또는 초당 수천 번, ' 쉘에 작성하지 않기를 바랍니다 … = /
  • 때로는 여러 줄의 null 유틸리티를 사용하여 텍스트가 유용 할 수 있습니다. 주석을 : <<=cut로 시작하면 쉘 스크립트에서 POD를 작성할 수 있습니다. 자세한 내용은이 예제를 참조하십시오 . 이렇게하면 perldoc script.sh를 사용할 수 있습니다. 그러나이 답변에 표시된 여러 줄 주석은 확실히 주석 블록이어야합니다 (각 줄은 # 로 시작).
  • 여기 ' 코멘트 및 기타 흥미로운 사용 사례 (dynaimc 스크립트 생성 포함) 모두에 사용되는 heredocs에 대한 멋진 토론 : tldp.org/LDP/ abs / html / here-docs.html # EX71C
  • 답변

    아닙니다. 모든 스타일의 주석 달기. : 기본 제공 명령은 전혀 작동하지 않습니다. 여기에 주석을 달기 위해 악용되고 있습니다.

    $ 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{|}~ 

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다