최근에 셸 스크립트를 공부하기 시작했으며 셸 스크립트에서 일련의 줄을 주석 처리하고 싶습니다. C / Java의 경우와 같습니다.
/* comment1
comment2
comment3
*/`
내가 어떻게 할 수 있습니까?
:
행의 첫 번째 열에 선행 공백이 없어야합니다.
최근에 셸 스크립트를 공부하기 시작했으며 셸 스크립트에서 일련의 줄을 주석 처리하고 싶습니다. C / Java의 경우와 같습니다.
/* comment1
comment2
comment3
*/`
내가 어떻게 할 수 있습니까?
:
행의 첫 번째 열에 선행 공백이 없어야합니다.
답변:
: '
열고 '
닫을 때 사용 합니다 .
예를 들면 다음과 같습니다.
: '
This is a
very neat comment
in bash
'
#
s와 결코 이 ...
:
대한 속기 true
및 true
매개 변수를 처리하지 않습니다. (수동 페이지 :SYNOPSIS true [ignored command line arguments]
:
과는 '
중요하다
# '
작은 따옴표 대신 마지막 줄 에서 사용 하는 것입니다. 이렇게하면 #
코드 블록을 활성화하기 위해 첫 번째 줄에 하나 를 넣을 수 있습니다 . #
첫 번째 줄을 제거하여 코드를 비활성화하십시오.
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는 추가는 매우 간단 수처럼 보인다 수 있습니다.
true
) 위험을 감수하지 마십시오 (heredoc 접근 방식은 아니지만 콜론 버전은) 1) 해킹은 여전히 의도를 혼란스럽게합니다. 여러 줄 주석에 대한 첫 번째 힌트가 없으면 대부분 코드가 무엇을하는지 궁금해합니다. 2) 예상치 못한 어두운 구석이 있습니다 (예 : 인용문을 두 배로 늘리거나 특정 경우 heredoc 마커를 인용하는 등).
${FOO:=bar}
또는 과 같은 문자열 을 포함했다고 가정하십시오 ${FOO{}}
. 첫 번째 변수는 변수를 만들고 설정하는 부작용이있을 수 FOO
있고 두 번째는 잘못된 대체 오류를 발생시킵니다. 실제 의견에서 기대하지 않는 두 가지 효과.
여기에 다른 답변을 읽은 후 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.
////
프로그래머로서 슬래시 시퀀스는 뇌에 주석으로 즉시 등록됩니다 (슬래시는 일반적으로 라인 주석에 사용되지만).
물론 "////"
문자열 일뿐입니다. 접두사와 접미사의 슬래시 수는 같아야합니다.
Usage:
<< EOF ... EOF
이것에 대한 당신의 의견은 무엇입니까?
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
'
x=
a로 :
당신은 어떤 부작용과 같은 효과가 있습니다. 유일한 단점은 주석이 작은 따옴표를 포함해서는 안된다는 것입니다. 그래서 나는 인용 된 heredoc의 사용법을 선호합니다.
똑똑하지 않은 간단한 솔루션 :
스크립트의 일부를 일시적으로 차단하십시오.
if false; then
while you respect syntax a bit, please
do write here (almost) whatever you want.
but when you are
done # write
fi
조금 복잡한 버전 :
time_of_debug=false # Let's set this variable at the beginning of a script
if $time_of_debug; then # in a middle of the script
echo I keep this code aside until there is the time of debug!
fi
# 나는 게으름과 단순함을 좋아합니다. 재미있는 해결 방법으로 #을 사용합니다.
1 PRESS :] 찾기 기능을 트리거하기 위해 ctrl + F 또는 cmd + F 또는 기타를 찾습니다.
2 다음과 같이 찾기 필드에서 정규식을 사용하십시오. (^.+)
3 다음으로 교체하십시오 : # $1
또는 원하는 경우#$1
# 참고 : 편집기에 세 단계가 없을 수 있습니다. 이 경우 온라인 정규식 도구를 사용하십시오 (정책상의 이유로 여기에서 제안 할 수 없음).
(^.+)
정규식으로하고 #$1
또는 #\1
대체 패턴으로# 해시를 즐기십시오!
ctrl+/
여러 줄의 주석을 켜거나 끄는 단축키 를 가지고 있습니다. 또한 사용중인 언어에 따라 주석 문자를 변경할 수 있습니다.