파이프 라인이있는 여러 줄로 된 bash 명령에서 별도의 줄에 대한 주석을 읽을 수 있습니까?


14

파이프 라인을 사용하여 쉘 스크립트를 작성하고 백 슬래시를 사용하여 행을 계속할 때 견고하고 읽기 쉽고 이식 가능한 방식 으로 별도의 행에 주석을 삽입하려고합니다 .

예를 들어, 주석 처리되지 않은 여러 줄 명령이 주어지면 (명확성을 위해 @DigitalRoss에서 도난 당함) :

echo abc |
     tr a-z A-Z |
     sort |
     uniq

... 아래는 내가 달성하고자하는 것에 미학적으로 가장 가깝지만 명백한 이유로 작동하지 않습니다 ... 그리고 예, 이것은 일반적으로 논평할만한 가치가 없다는 것을 잘 알고 있습니다 :

# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
    # Convert lowercase to uppercase.
     tr a-z A-Z |

     # Sort the results.
     sort |

     # Only show unique lines.
     uniq

다음과 같이 기존 관련 답변이 만족스럽지 않습니다 .

첫째, glenn jackman의 답변 (배열에 인수를 추가 한 다음 배열을 실행)은 단일 명령에는 작동하지만 파이프 라인에는 작동하지 않습니다 (그렇더라도 피할 수있는 복잡성을 추가합니다).

둘째, @Gilles의 대답 (을 사용 :)은 파이프 라인의 흐름을 변경하기 때문에 파이프 라이닝과 함께 작동하지 않는 것으로 보입니다.

$ echo "abc" | :
$

( 참고 : :수정되지 않은 출력에 해당하는 것이 있으면 미적으로 허용되지만 찾을 수는 없지만 사용자 정의 항목을 작성할 수는 있지만 이식성이 떨어집니다.)

마지막으로 StackOverflow에 대한 DigitalRoss의 답변 의 마지막 부분은 동일한 줄에 주석을 추가하는 데 효과적이지만 별도의 줄에 주석을 강력히 선호합니다. 그렇지 않으면 행의 길이가 크게 변하면 가독성이 떨어집니다.

echo abc |         # normal comment OK here`
     /usr/local/bin/really/long/path/ridiculously-long-filename.sh |  # another normal comment OK here
     sort |        # the pipelines are automatically continued
     uniq          # final comment

가독성을 유지하고 복잡성을 최소화하는 답을 찾고 있거나 왜 내가 찾고있는 것이 실현 불가능한 지에 대한 배경을 찾고 있습니다.


1
귀하의 의견에 대한 참고 사항 : 저는 섹션 또는 작업 단위를 설명하는 의견을 작성하도록 배웠습니다. 숙련 된 코더가 수행중인 작업을 설명하는 지능적인 주석을 작성하는 경우 스크립트를 유지 관리하는 사람은 누구나 사용 세부 정보를 이해하지 못하는 경우 항상 매뉴얼 페이지를 사용할 수 있습니다. 같은 댓글을 쓰면 안됩니다 i++; // increment i by one. 난 당신이 읽을 제안 "스타일을 프로그래밍의 요소"
BSD를

마지막 편집 내용을 삭제하려고 생각합니다. 질문에 질문, 답변의 반박 및 답변 자체가 포함되는 것은 드문 일이지만 다른 답변이 왜 작동하지 않는지를 설명하는 부분은 여기에 필요합니다. rozcietrzewiacz의 답변과 귀하의 의견은 함께 문제를 설명하지만 (개인적으로 별도의 답변을 게시하고 문제가 설명 된 것과 다르기 때문에이를 수락했습니다.)
Michael Mrozek

이해-피드백 주셔서 감사합니다; 수업은 배웠다!
Royce Williams

답변:


14

이건 어때?

echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \

# Sort the results.
sort | \

# Only show unique lines.
uniq

(백 슬래시 는 해당 행 의 마지막 문자 로 사용해야 합니다.) 해당 접근법의 이식성이 확실하지 않지만 current와 함께 작동합니다 bash.


아하! (facepalm) 나는 질문을 알지 못하고 실제로 게시 할 때 사용하고있는 관용구를 변형했습니다! 나는 각 줄 의 시작 부분 에 파이프를 넣었습니다. 이 방법은 bash와 sh에서 도달 할 수있는 모든 시스템에서 잘 작동한다는 것을 알고 이제는 그만하게되어 기쁩니다. 감사!
Royce Williams

그 의견이 줄 연속을 망치지 않습니까?
스튜어트 P. 벤틀리

각 주석 앞에 빈 줄이 있으면 제대로 작동합니다.
Royce Williams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.