잘못된 대체: 구분된 문서/EOF에 "`"로 끝나지 않습니다.

잘못된 대체: 구분된 문서/EOF에 "`"로 끝나지 않습니다.

나는남성스타일 활용정보다음과 같은 출력을 설명하는 쉘 함수 man find:

NAME
       find - search for files in a directory hierarchy

SYNOPSIS
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

DESCRIPTION
       This  manual  page  documents the GNU version of find.  GNU find searches the directory tree rooted at each
       given starting-point by evaluating the given expression from left to  right,  according  to  the  rules  of
       precedence  (see section OPERATORS), until the outcome is known (the left hand side is false for and opera‐
       tions, true for or), at which point find moves on to the next file name.  If no  starting-point  is  speci‐
       fied, `.' is assumed.

OPTIONS

` 문자에 대해 오류 메시지가 나타납니다.
다음의 간단한 스크립트는 오류를 보여줍니다.

~$ cat <<EOF
`.'
EOF

bash: bad substitution: no closing "`" in `.'

heredoc문자열을 붙여넣어 에코하는 것이 멋진 방법이라고 생각했습니다 .따옴표 등의 내용을 이스케이프 처리할 필요가 없습니다. 제가 틀린 것 같아요 :/

누군가 이 동작을 설명할 수 있나요? ` 문자가 허용 됩니까 heredoc?

편집 2: 답변을 수락했습니다.여기에 인용된 문서 <<'END_HELP', 하지만 이런 종류의 완전한 수동 출력에는 사용하지 않을 것입니다.선행하다제안

편집 1:(나중에 읽을 수 있도록)사용 제한여기에 인용된 문서tput에서 사용이 차단되었습니다 here-document.
이를 위해 나는 다음을 수행했습니다.

  1. 따옴표 없이는 명령이 실행될 때 here-document사용됩니다 .tput
  2. 백틱을 이스케이프 처리하여 "잘못된 대체" 오류를 방지합니다.
  3. tput내부용here-document

예:

normal=$( tput sgr0 ) ;
bold=$(tput bold) ;

cat <<END_HELP # here-document not quoted
${bold}NAME${normal}
       find - search for files in a directory hierarchy

${bold}SYNOPSIS${normal}
       find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

${bold}DESCRIPTION${normal}
       This  manual  page  documents the GNU version of find.  GNU find searches the directory tree rooted at each
       given starting-point by evaluating the given expression from left to  right,  according  to  the  rules  of
       precedence  (see section OPERATORS), until the outcome is known (the left hand side is false for and opera‐
       tions, true for or), at which point find moves on to the next file name.  If no  starting-point  is  speci‐
       fied, \`.' is assumed.
END_HELP

unset normal ;
unset bold ;

여기에서 오류의 원인으로 이스케이프된 백틱을 기록해 두세요.

\`.'

답변1

백틱은 명령 대체를 도입합니다. 여기에 있는 문서는 참조되지 않으므로 이는 셸에서 해석됩니다. 명령 대체에 종료 백틱이 없기 때문에 쉘이 불평합니다.

이 문서를 인용하려면 다음을 사용하세요.

cat <<'END_HELP'
something something help
END_HELP

또는

cat <<\END_HELP
something something help
END_HELP

이 문제 해결에 대한 귀하의 의견과 관련하여:

유틸리티는 완전한 매뉴얼 자체를 출력하는 경우가 거의 없지만 요약 또는 기본 사용 정보를 제공할 수 있습니다. 색상이 지정되는 경우는 거의 없습니다(예를 들어 출력이 터미널이나 호출기로 전달되지 않을 수 있으므로 less). 실제 매뉴얼은 일반적으로 groff전용 매뉴얼 페이지 포맷터를 사용하여 포맷됩니다.mandoc그리고 코드와 완전히 별도로 처리됩니다.

답변2

백틱/악센트 및 작은따옴표/아포스트로피를 사용하여 구체적으로 인용하고 싶습니까? 아니요. 이 조합은 정말 끔찍해 보입니다. 대부분의 글꼴에서 백틱은 기울어져 있고 (ASCII) 아포스트로피는 직선입니다. 다음은 내 브라우저가 매뉴얼 페이지 조각의 마지막 줄을 표시하는 방법입니다.

여기에 이미지 설명을 입력하세요.

수직 ASCII 인용문보다 더 예쁜 인용문을 사용하려면 아마도 다음과 같은 것을 사용해야 할 것입니다.U+2018그리고U+2019.

물론 출력은 글꼴에 따라 다르지만 "this"가 "this"보다 더 좋아 보인다고 생각합니다.

관련 정보