`cat EOF`와 `cat EOT`의 차이점은 무엇이며, 언제 사용해야 합니까?

`cat EOF`와 `cat EOT`의 차이점은 무엇이며, 언제 사용해야 합니까?

cat > /path/to/file << EOFBash 스크립트에서 한 파일에 여러 줄을 인쇄할 때 다음을 사용하는 데 익숙합니다. 회사의 이전 코드를 확인하다가 익숙한 코드 대신 cat EOT지시어를 찾았습니다.cat EOF시간대신에에프결국) 호기심이 나를 물었습니다.

나는 빠르게 조사를 했고 내가 찾은 것은이것은 또 다른 질문입니다, 하지만 그것은 내가 알고 싶은 것과 관련이 없다고 생각합니다.

다음 코드로 몇 가지 테스트를 수행했습니다.

password=hello
cat > ./hello.txt << EOT
authentication {
    auth_type PASS
    auth_pass $password
  }
EOT

EOF내가 얻는 출력은 대신 사용할 때와 정확히 동일합니다 EOT. 예상대로 출력은 다음과 같습니다.

root@test_VM:~# bash test.sh && cat hello.txt

authentication {
    auth_type PASS
    auth_pass hello
  }

질문은 다음과 같습니다.

  1. EOT이들사용하다그리고 의 차이점은 무엇인가요 EOF?
  2. 언제 다른 것을 사용해야 합니까?

답변1

이 두 문자열이나 다른 문자열 사이에는 차이도 없고 특별한 의미도 없습니다. 이는 임의의 종결자일 뿐이므로 원하는 거의 모든 문자열을 사용할 수 있습니다.

물론 데이터 자체에는 해당 특정 행이 포함될 수 없습니다. 따라서 데이터에 다른 here 문서가 있는 셸 스크립트 등이 포함되어 있는 경우 두 문서 모두에서 서로 다른 종결자를 사용해야 합니다. 일종의 설명 문자열을 사용하면 향후 스크립트 독자에게 유용할 수 있습니다.

예를 들어

cat > test.sh <<END_OF_SCRIPT
cat <<EOF
hello
EOF
END_OF_SCRIPT

test.sh쉘을 통해 실행될 때 생성되는 인쇄입니다 hello.

다만, here 문서를 시작하는 줄에 종결자를 인용하면 차이는 있겠지만, here document 데이터의 확장을 방해하게 됩니다. 그러면 $i변수 값이 대신 인쇄됩니다 .

cat << 'EOF'
$i
EOF

또한보십시오:

답변2

두 번째 질문에 먼저 답해 드리겠습니다.

즉, 프로젝트의 코딩 스타일 가이드에 필요한 것은 무엇이든 사용해야 합니다. 그렇지 않은 경우에는 자신만의 가이드를 사용해야 합니다.마디 없는선호.

제가 사용하는 코드 편집기는 here-doc 연산자를 입력할 때마다 "EOF"를 생성합니다. 하지만 저는 개인적으로 실제로 셸의 특수 문자가 아닌 "!"를 선호합니다. (여기서는 문서 구분 기호로 우연히 사용되는 예약어입니다)

첫 번째 질문으로 돌아갑니다. EOT는 실제로 Unix 시스템의 관례에 따라 터미널 설정에 다른 변경 사항이 없을 때 터미널 입력을 읽는 프로그램에 대한 파일 끝 표시를 생성하는 ASCII 제어 문자입니다.

따라서 서로 다른 here 문서의 중복되는 부분을 분리하는 것 외에도 EOF와 EOT를 구별하는 것도 here 문서 내용의 목적을 어느 정도 표현하는 역할을 할 수 있습니다.

마침내. 연결된 다른 질문은 EOF가 EOT와 다른 값을 갖는 이유에 대한 설명을 요구합니다. 설명했듯이 EOF는상황, EOT는 유효한 바이트 값 및 문자인 반면 EOF는 기본 터미널 설정에서 EOT 문자에서 생성됩니다.

관련 정보