Bash에 대한 인라인 코멘트?


142

한 줄 명령으로 단일 플래그를 주석 처리하고 싶습니다. Bash는 from # till end-of-line의견 만있는 것 같습니다 . 나는 다음과 같은 트릭을보고있다.

ls -l $([ ] && -F is turned off) -a /etc

추악하지만 아무것도 아닌 것보다 낫습니다. 더 좋은 방법이 있습니까?

다음은 작동하는 것 같지만 휴대용인지 확실하지 않습니다.

ls -l `# -F is turned off` -a /etc


1
@Juha Palomäki가 언급 한 링크를 따라 @pjh가 ${IFS#comment}소개 한이 멋진 트릭이 있습니다. 서브 쉘이 호출되지 않습니다.
Alexis

답변:


110

내가 선호하는 것은 :

Bash 스크립트에서 주석 달기

이것은 약간의 오버 헤드가 있지만 기술적으로 귀하의 질문에 대답합니다.

echo abc `#put your comment here` \
     def `#another chance for a comment` \
     xyz etc

파이프 라인의 경우 오버 헤드가없는보다 깨끗한 솔루션이 있습니다.

echo abc |        # normal comment OK here
     tr a-z A-Z | # another normal comment OK here
     sort |       # the pipelines are automatically continued
     uniq         # final comment

여러 줄 명령에 줄 설명을 넣는 방법


3
백틱을 사용해야 $(#comment)하지만 작동하지 않습니다.
funroll

1
일부 버전은 )주석 자체의 일부로 간주합니다 . bash의 대부분의 문제는 이전 버전과의 레트로 호환성으로 인한 것이며, 가장 일반적인 전략 중 하나는 가장 오래된 솔루션을 사용하는 것입니다.
Rafareino

2
이것은 실제 의견이 아닙니다 true && `# comment` && true. 유효한 표현입니다. 실제 주석은 다음과 같은 내용을 생성합니다. syntax error near unexpected token && '`
Sebastian Wagner

당신은 맞습니다. 나에게 그것은 더 나은 언어가 필요하다는 신호이지만, 이미 작성된 코드를 문서화하기 위해 이미 작성된 코드를 유지하면서 훌륭하게 할 수 있습니다.
Rafareino

도와 주셔서 감사합니다!
xiarnousx

58

줄을 복사하고 원래 버전을 주석 처리하는 것이 가장 쉽고 읽기 쉽습니다.

#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc

명확성을 위해 공감하십시오. 이것이 왜 첫 번째 옵션이 아닌지 모릅니다.
David Tabernero M.

하지만 인라인이 아니십니까? 나는 bash가 지원하지 않는 일을해야한다는 것이 다른 길을 찾는 원인이라고 말하는 것이 공정하다고 생각합니다.
ThorSummoner

25

$(: ...) 조금 추악하지만 여전히 좋지는 않습니다.


2
이 구문을 사용하면 하위 셸을 실행하면 코드 동작을 전혀 변경하지 않고 주석을 향상시킬 수있는 주석이 제공되지만이 하위 셸을 시작 / 종료하는 시간은 코드를 느리게 (최소하게) 만들게됩니다. 줄 바꿈을 시작할 때 콜론 만 사용하지 않는 이유는 무엇입니까?
Rafareino

1
$ {IFS # ...}를 사용하면 하위 쉘이 호출되지 않습니다.
알렉시스

3
@Rafareino : 예. 그러나 심각하게도 95 %의 응용 프로그램에서는이 오버 헤드가 전혀 중요하지 않습니다. 중요한 경우에는 대부분 Bash보다 빠른 언어를 사용하는 것이 좋을 것입니다.
leftaroundabout

... 문제는 $(: ...)구문이 실제로 주석을 포함하는 것을 허용하지 않는 것 같습니다 echo "foo" `# comment` "bar". 두 번째 백틱에서 주석을 종료 하지만 등가물 echo "foo" $(: # comment) "bar"은 뒤에 구문 분석되지 않습니다 #.
leftaroundabout


4

다음은 여러 파이프 명령 사이의 인라인 주석에 대한 솔루션입니다.

주석 처리되지 않은 코드의 예 :

    #!/bin/sh
    cat input.txt \
    | grep something \
    | sort -r

파이프 주석 솔루션 (헬퍼 기능 사용) :

    #!/bin/sh
    pipe_comment() {
        cat - 
    }
    cat input.txt \
    | pipe_comment "filter down to lines that contain the word: something" \
    | grep something \
    | pipe_comment "reverse sort what is left" \
    | sort -r

또는 원하는 경우 도우미 기능이없는 동일한 솔루션이 있지만 조금 더 지저분합니다.

    #!/bin/sh
    cat input.txt \
    | cat - `: filter down to lines that contain the word: something` \
    | grep something \
    | cat - `: reverse sort what is left` \
    | sort -r

7
또한 파이프 문자를 이전 줄의 끝으로 이동하면 유키 백 슬래시-줄 바꿈을 제거 할 수 있습니다.
tripleee

3

대부분의 명령은 args가 어떤 순서로든 오도록합니다. 주석 처리 된 플래그를 행의 끝으로 이동하십시오.

ls -l -a /etc # -F is turned off

그런 다음 다시 켜려면 주석 처리를 제거하고 텍스트를 제거하십시오.

ls -l -a /etc -F

1
젠장, #명령 후 하나의 공백없이 추가했습니다 . 감사합니다!
15:00에


1

와 같은 명령의 일부를 비활성화하기 위해 경로에 a && b있는 빈 스크립트 x를 만들었 으므로 다음과 같은 작업을 수행 할 수 있습니다.

mvn install && runProject

내가 빌드해야 할 때

x mvn install && runProject

사용하지 않을 때 (사용 Ctrl + ACtrl + E시작과 끝으로 이동).

의견에서 언급했듯이 다른 방법은 Bash 내장 :입니다 x.

$  : Hello world, how are you? && echo "Fine."
Fine.

2
이러한 내장은 이미 존재합니다 ::string; of; commands; : disabled; enabled;
xenithorb

더 나은 :) 감사합니다
Ondra Žižka

-1

주석을 작성할 가치가 있다면, 줄의 끝이나 그 자체의 줄로 갈 수 있습니다. 어떤 언어로든 주석 앞뒤에 코드가 포함 된 라인 내 주석이 필요한 경우는 거의 없습니다.

아, '{comments}'를 사용하는 SQL의 방언 인 예외가 하나 있습니다. 때때로, 나는 쓸 것이다 :

CREATE UNIQUE INDEX u1_table ON Table(...);
CREATE {DUPS} INDEX d1_table ON Table(...);

그러나 그것은 심지어 스트레칭입니다.

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