[shell] Bash에서 여러 줄 주석을 만드는 방법은 무엇입니까?

최근에 셸 스크립트를 공부하기 시작했으며 셸 스크립트에서 일련의 줄을 주석 처리하고 싶습니다. C / Java의 경우와 같습니다.

/* comment1
   comment2
   comment3
*/`

내가 어떻게 할 수 있습니까?



답변

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

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

: '
This is a
very neat comment
in bash
'


답변

bash의 여러 줄 주석

: <<'END_COMMENT'
This is a heredoc (<<) redirected to a NOP command (:).
The single quotes around END_COMMENT are important,
because it disables variable resolving and command resolving
within these lines.  Without the single-quotes around END_COMMENT,
the following two $() `` commands would get executed:
$(gibberish command)
`rm -fr mydir`
comment1
comment2
comment3
END_COMMENT


답변

의견 및 기타 답변을 바탕으로이 게시물을 업데이트하고 있으므로 2020 년 5 월 22 일 이전의 의견은 더 이상 적용되지 않을 수 있습니다.

Bash는 여러 줄 주석에 대한 내장 구문을 제공하지 않지만 “지금 작동”하는 기존 bash 구문을 사용하는 핵이 있습니다.

개인적으로 나는 가장 간단한 (즉, 가장 시끄럽고, 가장 이상하고, 가장 타이핑하기 쉽고, 가장 명백한) 인용 된 HEREDOC을 사용하는 것이지만, 당신이하고있는 일을 분명히하고 모든 곳에서 동일한 HEREDOC 마커를 사용하는 것입니다.

<<'### BLOCK COMMENT'
line 1
line 2

line 3
line 4
### BLOCK COMMENT

HEREDOC 마커를 작은 따옴표로 묶으면 충돌이나 출력을 유발하는 이상한 대체 및 마커 자체의 구문 분석과 같은 일부 쉘 구문 분석 부작용을 피할 수 있습니다. 따라서 작은 따옴표를 사용하면 마감 종점 주석 표시를 더 자유롭게 사용할 수 있습니다. 예를 들어 다음은 트리플 해시를 사용하여 bash에서 여러 줄 주석을 제안합니다. 작은 따옴표가 없으면 스크립트가 중단됩니다. 제거해도 ###의가 FOO{}(경우 인쇄 할 나쁜 대체 원인이 더 스크립트를 중단하지 않을 것이다 set -e)는 작은 따옴표 아니었다면 :

set -e

<<'### BLOCK COMMENT'
something something ${FOO{}} something
more comment
### BLOCK COMMENT

ls

물론 사용할 수 있습니다

set -e

<<'###'
something something ${FOO{}} something
more comment
###

ls

그러나 이것의 의도는이 속임수에 익숙하지 않은 독자에게는 분명하지 않습니다.

요즘 좋은 편집기를 사용하면 ctrl- / 또는 이와 비슷한 것을 눌러 선택을 취소 / 주석 처리 할 수 ​​있습니다. 모두가 이것을 분명히 이해합니다.

# something something ${FOO{}} something
# more comment
# yet another line of comment

물론, 단락을 다시 채우려는 경우 위의 블록 주석만큼 편리하지는 않습니다.

분명히 다른 기술이 있지만이를 수행하는 “기존의”방법은없는 것 같습니다. 있다면 그것은 좋은 일 것 ###>하고 ###<, 시작과 주석 블록의 끝을 나타 내기 위해 bash는 추가는 매우 간단 수처럼 보인다 수 있습니다.


답변

여기에 다른 답변을 읽은 후 IMHO가 아래 내용을 생각해 냈습니다. 스크립트 내 사용 정보에 특히 적합합니다.

<< ////

Usage:
This script launches a spaceship to the moon. It's doing so by
leveraging the power of the Fifth Element, AKA Leeloo.
Will only work if you're Bruce Willis or a relative of Milla Jovovich.

////

프로그래머로서 슬래시 시퀀스는 뇌에 주석으로 즉시 등록됩니다 (슬래시는 일반적으로 라인 주석에 사용되지만).

물론 "////"문자열 일뿐입니다. 접두사와 접미사의 슬래시 수는 같아야합니다.


답변

이것에 대한 당신의 의견은 무엇입니까?

function giveitauniquename()
{
  so this is a comment
  echo "there's no need to further escape apostrophes/etc if you are commenting your code this way"
  the drawback is it will be stored in memory as a function as long as your script runs unless you explicitly unset it
  only valid-ish bash allowed inside for instance these would not work without the "pound" signs:
  1, for #((
  2, this #wouldn't work either
  function giveitadifferentuniquename()
  {
    echo nestable
  }
}


답변

bash에서 여러 줄 주석을 수행하는 방법은 다음과 같습니다.

이 메커니즘에는 두 가지 장점이 있습니다. 하나는 주석을 중첩 할 수 있다는 것입니다. 다른 하나는 시작 라인을 주석 처리하여 블록을 활성화 할 수 있다는 것입니다.

#!/bin/bash
# : <<'####.block.A'
echo "foo {" 1>&2
fn data1
echo "foo }" 1>&2
: <<'####.block.B'
fn data2 || exit
exit 1
####.block.B
echo "can't happen" 1>&2
####.block.A

위의 예에서 “B”블록은 주석 처리되지만 “B”블록이 아닌 “A”블록의 부분은 주석 처리되지 않습니다.

이 예제를 실행하면 다음과 같은 출력이 생성됩니다.

foo {
./example: line 5: fn: command not found
foo }
can't happen


답변

선택한 답변을 시도했지만 쉘 스크립트를 실행했을 때 모든 것이 화면에 인쇄되고 (주피터 노트북이 모든 것을 '''xx'''따옴표로 인쇄하는 방식과 유사 ) 끝에 오류 메시지가 있음을 발견했습니다. 아무것도하지 않았지만 무서운 것 입니다. 그런 다음 작은 따옴표가 여러 줄에 걸쳐있을 수 있음을 편집하는 동안 깨달았습니다. 블록을 변수에 할당하면됩니다.

x='
echo "these lines will all become comments."
echo "just make sure you don_t use single-quotes!"

ls -l
date

'