쉘 스크립트에서 주석 차단


250

쉘 스크립트에서 코드 블록을 주석 처리하는 간단한 방법이 있습니까?


2
그렇게 쉽고 간단한 질문이 너무 다르고 복잡한 답변을 갖는 방법에 흥미가 있습니다.
Sigur

답변:


348

bash에서 :

#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment

''주위에 END구분 기호, 예를 들면, 같은 블록 안에 다른 것들을 중요 $(command)구문 분석 및 실행됩니다.

에 대한 설명을 참조하십시오 질문을.


24
귀여운 트릭- 'END'키워드 (물론 사용자가 선택한)가 주석 처리 할 자료 내부에 자체적으로 줄에 나타나지 않는 한.
Jonathan Leffler 2016 년

9
@kalengi : 그렇습니다; 따옴표에 사용 된 단어는 편리한 것이 될 수 있습니다. EOF고전적인 예이다 (그래서입니다 !자체에 느낌표),하지만 당신은 사용할 수 있습니다 SNURFLE_BURGERS또는 classical_end_marker주석 처리 된 재료 자체의 줄에 나타나지 않는 다른 단어 나. 나는 공간 등을 실험하는 것에 익숙하지 않지만 단어가 그들과 잘 작동 할 수도 있습니다.
Jonathan Leffler 2016 년

4
확실히 작동하지만 누구나 어떻게 작동하는지 자세히 설명 할 수 있습니까? 감사합니다
mbbce

5
@MB_CE, stackoverflow.com/questions/32126653/…를 참조하십시오 . 즉 :, 입력을 읽지 않고 항상 성공적인 값으로 종료 되는 명령 ( )을 실행 하고 "주석"을 입력으로 보냅니다. 별로.
Charles Duffy

2
수동 코드를 생성하기 위해 활성 코드를 작성하는 것은 믿을 수 없을 정도로 추악하고 혼란스러운 것으로 생각됩니다 ... 좋은 오래된 블록 선택 모드를 사용하고 #을 누르십시오. 그 큰 문제는 무엇입니까?
Rusty75

90

쉘 스크립트에는 블록 주석이 없습니다.

vi(yes, vi)를 사용하면 n 행 에서 m 행까지 쉽게 주석을 달 수 있습니다

<ESC>
:10,100s/^/#/

(10 기호에서 100 기호로 대체 줄 시작 (^)을 # 기호로 읽습니다.)

댓글을 달지 않은 상태

<ESC>
:10,100s/^#//

(10 줄에서 100 줄의 대체 줄 시작 (^) 다음에 #가 붙은 #을 읽습니다.)

vi어디에나 거의 보편적입니다 /bin/sh.


vi 앞에 정규 표현식을 사용하여 줄 앞에 #을 배치하는 멋진 트릭입니다.
Atiq Rahman

5
팁-vim을 사용하고 있는데 이것이 모든 줄의 시작 부분을 강조 표시하면 끝 부분에 추가 |noh하십시오. 파이프는 추가 명령을 분리 noh하며 강조 표시하지 않습니다. 다음에 검색 할 때 검색어 강조 표시가 자동으로 다시 시작됩니다. 예 ::10,100s/^/#/g|noh
Matthew

스크립트에서 자동화하려면 이것이 필요합니다. 사람의 상호 작용없이 vi를 사용하여 파일에 저장하는 방법이 있습니까?
Timothy Swan

1
@TimothySwan gawk 또는 sed 프로그램이 그렇게 할 수 있다고 생각합니다 ... 어쨌든.
BeowulfNode42

VI와 블록을 주석 (또는 접두어)의 내 선호하는 방법은 : 당신이 의견을 시작하려는 라인의 시작으로 이동 (예를 들어, <SHIFT>+G 10 <ENTER>다음 0또는 탐색에 다른 방법으로). 그런 다음을 사용 <CTRL>+V하여 시각적 차단 모드로 들어가고 주석을 추가하려는 모든 줄의 시작 부분을 강조 표시하십시오 (이 예에서는 90 J). 그런 다음을 눌러 SHIFT+I강조 표시된 블록 앞에 삽입하십시오. 주석 기호 (예 :)를 입력하고을 #눌러 <ESC>접두사를 완성하십시오. 이 설명은 오래 들리지만 실제로는 실제로 훨씬 빠릅니다.
Ueffes

52

당신이 사용할 수있는:

if [ 1 -eq 0 ]; then
  echo "The code that you want commented out goes here."
  echo "This echo statement will not be called."
fi

14
이것은 고전적이지만 stackoverflow.com/a/19409316/832230 메모 처럼 if [ ];작동합니다.
Acumenus

12
아마도 더 명확 할 것입니다 : if false;. stackoverflow.com/a/18019516/2097284
Camille Goudeseune 2016 년

3
이것은 주석 처리 된 텍스트가 실제로 코드라는 것만 작동하는 것 같습니다. 파이프와 세미콜론에 대한 주석에 문제가 있습니다. Sunny256 답변이 효과가있었습니다.
swdev

더 간결한 것은 []; 테스트를 사용하여
저스틴 던컨

27

다음은 작동한다 sh, bash, kshzsh.

주석 처리 할 코드 블록은 다음 BEGINCOMMENTENDCOMMENT같이 넣을 수 있습니다 .

[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"

BEGINCOMMENT
  echo "This line appears in a commented block"
  echo "And this one too!"
ENDCOMMENT

echo "This is outside the commented block"

위의 코드를 실행하면 다음과 같은 결과가 발생합니다.

This is outside the commented block

주석 처리 된 코드 블록 을 주석 해제 하려면

alias BEGINCOMMENT="if : ; then"

대신에

alias BEGINCOMMENT="if [ ]; then"

위의 예에서.


23

작은 따옴표를 피할 수 있다면 :

__='
blah blah comment.
'

나는 이것을 좋아한다. 이중 밑줄은 무엇을 의미합니까? 내가 말할 수있는 가장 좋은 것은 개인으로 취급되어야한다는 규칙을 사용하여 변수 이름 일 뿐입니 까?
chessofnerd

또한 대부분의 편집기에서 구문 강조를 제공하며 명확성을 위해 문서 또는 문서와 같은 변수 이름을 제안하지만 $ __로 필요할 경우 호출 할 수 있습니다.
jasonleonhard


이것이 가장 좋은 대답이어야합니다. 이중 밑줄 대신 더미 변수 이름을 입력하십시오
B Abali

이것을 시도했지만 -F ';'가있어서 실패했습니다. ' 주석 처리 할 블록 내부.
yO_

15

: '열고 '닫을 때 사용 합니다 .

예를 들면 다음과 같습니다.

: '
This is a
very neat comment
in bash
'

이것은 Vegas에서 찾은 예입니다 .


2
hack-ish, 굉장
Gergely Lukacsy

그것은 나에게 가장 좋은 것입니다.
DPalharini

14

Vim에서 :

  1. 댓글을 남기고 싶은 첫 번째 줄로 이동
  2. shift-V (시각 모드 입력), 블록의 하이라이트 라인
  3. 선택시 다음을 실행하십시오. :s/^/#/
  4. 명령은 다음과 같습니다.

      :'<,'>s/^/#
  5. 엔터를 치다

예 :

shift-V
jjj
:s/^/#
<enter>

7
주석 처리를 제거하려면:s/^#/
Buge

@horta의 답변을 확인하십시오 : stackoverflow.com/a/28376319/3506015- 키 누르기가 훨씬 적습니다!
geedoubleya

4

Vi / Vim의 Visual Block 모드는 다음과 같은 것을 위해 설계되었습니다 :

Ctrl-V  
Highlight first element in rows you want commented  
Shift-i  
#  
esc  

주석 해제는 다음과 같습니다.

Ctrl-V  
Highlight #'s  
d  
l  

이것은 행 번호를 세거나 읽지 않고 이러한 종류의 일을하는 vi의 대화 형 방법입니다.

마지막으로 Gvim에서는 ctrl-q를 사용하여 ctrl-v 대신 Visual Block 모드로 들어갑니다 (붙여 넣기 바로 가기이기 때문에).


이 단순한 방법을 좋아하십시오. : o)
geedoubleya

4

모든 정직에서 왜 그렇게 과도하게 엔지니어링 하는가?

수동 코드를 생성하기 위해 활성 코드를 작성하는 것은 실제로 나쁜 습관이라고 생각합니다.

내 해결책 : 대부분의 편집자는 블록 선택 모드를 가지고 있습니다. 주석 처리하려는 모든 행에 #을 추가하기 위해 사용하십시오. 큰 문제는 무엇입니까 ...

메모장 예 :

만들려면 : Alt-아래로 마우스 드래그, #을 누르십시오.

삭제하려면 : Alt 키를 누른 상태에서 마우스 오른쪽 아래로 이동하고 오른쪽 화살표를 누른 다음 삭제하십시오.


8
사용자가 터미널에있을 가능성이 높습니다. 마우스 환경을 가정 할 수 없습니다.
Gary

그들은 여전히 ​​존재합니까? 나는 보통 그래픽 모드에서 편집하고 vi를 사용하여 다시 붙여 넣습니다. 쉬운 해결 방법입니다.
Rusty75

2

sunny256의 대답에 대한 here-doc 트릭의 변형은 주석에 Perl 키워드를 사용하는 것입니다. 주석이 실제로 일종의 문서 인 경우 주석이 달린 블록 내에서 Perl 구문을 사용하여 멋진 형식으로 인쇄하고 맨 페이지로 변환하는 등의 작업을 수행 할 수 있습니다.

쉘에 관한 한으로 만 교체 'END'하면 '=cut'됩니다.

echo "before comment"
: <<'=cut'
=pod

=head1 NAME
   podtest.sh - Example shell script with embedded POD documentation

etc.

=cut
echo "after comment"

( " 쉘 스크립트에 문서 포함 "에 있음)


0

다른 모드는 다음과 같습니다. 편집기에 블록 없음 주석 옵션이있는 경우

  1. 편집기의 두 번째 인스턴스를여십시오 (예 : File => New File ...).
  2. 작업중인 이전 파일에서 원하는 부분 만 선택하십시오.
  3. 새 임시 파일의 창에 복사하여 붙여 넣습니다 ...
  4. 편집 메뉴를 열고 바꾸기를 선택한 다음 '\ n'으로 바꿀 문자열로 입력하십시오.
  5. 대체 문자열로 입력 : '\ n #'
  6. '모두 바꾸기'버튼을 누르십시오

끝난

그것은 모든 편집기에서 작동합니다


0

나는 한 줄을 열고 닫는 것을 좋아합니다.

if [ ]; then ##
    ...
    ...
fi; ##

'##'은 블록 주석의 시작과 끝을 쉽게 찾도록 도와줍니다. '##'다음에 숫자가 있으면 숫자를 붙일 수 있습니다. 주석을 끄려면 '[]'에 '1'을 붙이십시오. 또한 주석이 달린 블록에서 작은 따옴표로 인한 문제를 피합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.