파이프를 사용하는 여러 줄 bash 명령의 개별 줄에 대해 읽을 수 있는 주석이 있습니까?

파이프를 사용하는 여러 줄 bash 명령의 개별 줄에 대해 읽을 수 있는 주석이 있습니까?

파이프와 백슬래시가 포함된 연속 라인을 사용하여 쉘 스크립트를 생성할 때 주석을 삽입하고 싶습니다.다른 라인에, 강력하고 읽기 쉽고 이식 가능한 방식으로.

예를 들어, 주석 처리되지 않은 여러 줄 명령이 있는 경우(명확성을 위해 @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

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

첫 번째,글렌 잭맨의 답변(배열에 인수를 추가한 다음 배열을 실행하는 것)은 단일 명령에는 작동하지만 파이프라인에는 작동하지 않습니다. 설사 그렇게 하더라도 피하고 싶은 복잡성이 추가됩니다.

두번째,@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

이건 어때?

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

# Sort the results.
sort | \

# Only show unique lines.
uniq

(백슬래시는 다음과 같이 필요합니다.마지막 문자이 라인에서. ) 이 접근 방식이 얼마나 이식성이 있는지는 잘 모르겠지만 현재 bash.

답변2

약간 어리석고 비효율적이지만 작동하며 |-first 스타일로 작동합니다.

# Add a comment to a pipeline, old-school BASIC-style
function REM {
  cat
}

cmd1 \
| REM "comment on cmd2" \
| cmd2 \
| REM "comment on cmd3" \
| cmd3

즉, 프로덕션 코드에서 이를 본다면 아마도 이를 작성한 사람에게 화를 내고 소리를 지르게 될 것입니다.주의해서 사용하세요.

더 진지하게, 블록은 어떻습니까 {}?

cmd1 \
| {
  # comment on cmd2
  cmd2
} \
| {
  # comment on cmd3
  cmd3
}

관련 정보