cat > /path/to/file << EOF
Bash 스크립트에서 한 파일에 여러 줄을 인쇄할 때 다음을 사용하는 데 익숙합니다. 회사의 이전 코드를 확인하다가 익숙한 코드 대신 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
}
질문은 다음과 같습니다.
EOT
이들사용하다그리고 의 차이점은 무엇인가요EOF
?- 언제 다른 것을 사용해야 합니까?
답변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
또한보십시오:
- 3.6.6 여기에 문서화배쉬 매뉴얼에서
- 2.7.4 여기 문서POSIX 쉘 언어 설명
- 여기 문서wiki.wooledge.org에서
답변2
두 번째 질문에 먼저 답해 드리겠습니다.
즉, 프로젝트의 코딩 스타일 가이드에 필요한 것은 무엇이든 사용해야 합니다. 그렇지 않은 경우에는 자신만의 가이드를 사용해야 합니다.마디 없는선호.
제가 사용하는 코드 편집기는 here-doc 연산자를 입력할 때마다 "EOF"를 생성합니다. 하지만 저는 개인적으로 실제로 셸의 특수 문자가 아닌 "!"를 선호합니다. (여기서는 문서 구분 기호로 우연히 사용되는 예약어입니다)
첫 번째 질문으로 돌아갑니다. EOT는 실제로 Unix 시스템의 관례에 따라 터미널 설정에 다른 변경 사항이 없을 때 터미널 입력을 읽는 프로그램에 대한 파일 끝 표시를 생성하는 ASCII 제어 문자입니다.
따라서 서로 다른 here 문서의 중복되는 부분을 분리하는 것 외에도 EOF와 EOT를 구별하는 것도 here 문서 내용의 목적을 어느 정도 표현하는 역할을 할 수 있습니다.
마침내. 연결된 다른 질문은 EOF가 EOT와 다른 값을 갖는 이유에 대한 설명을 요구합니다. 설명했듯이 EOF는상황, EOT는 유효한 바이트 값 및 문자인 반면 EOF는 기본 터미널 설정에서 EOT 문자에서 생성됩니다.