![이 문서에서 공백 대신 탭을 사용해야 하는 이유는 무엇입니까? [복사]](https://linux55.com/image/108134/%EC%9D%B4%20%EB%AC%B8%EC%84%9C%EC%97%90%EC%84%9C%20%EA%B3%B5%EB%B0%B1%20%EB%8C%80%EC%8B%A0%20%ED%83%AD%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%20%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
저는 개인적으로 Windows와 Linux를 사용하여 크로스 플랫폼 작업을 하고 때로는 .sh
Notepad++를 사용하여 파일을 편집합니다. 따라서 모든 파일의 탭 들여쓰기를 Unix 스타일로 유지하는 것은 나에게 문제가 되었기 때문에 내 해결책은 공백 기반 들여쓰기를 사용하는 것이었습니다.
그러나 heredocs에서 herdocs를 들여쓰기할 때 문제가 있습니다. 예를 들어, 다음은 내부 고양이 구분 기호를 포함하는 외부 구분 기호입니다.
bash /dev/fd/10 10<<-'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
EMW
Some other command.
EOT
Unix와 같은 탭을 사용하여 bash에서 성공적으로 실행했지만 Windows와 같은 탭에서는 실행하지 않았던 것을 기억합니다. 왜냐하면 공백을 사용하는 것처럼 스크립트가 충돌했기 때문입니다.
내 질문:
내 질문은 실제로 다음 질문으로 구성될 수 있습니다. 나는 나 자신뿐만 아니라 다른 호기심 많은 사람들이 이것을 찾을 수 있도록 묻고 있습니다.
- 다른 here 문서에서 명령과 here 문서를 들여쓰기 위해 공백을 사용할 수 없는 이유는 무엇입니까?
- 내가 틀렸고 명령과 여기 문서를 다른 여기 문서에 공백 들여쓰기를 허용하는 해결 방법이 있다면 그게 무엇인가요?
답변1
첫째, Unix와 같은 표나 Windows와 같은 표가 없습니다. 탭 문자는 Windows와 Unix에서 동일합니다. 운영 체제 사이가 아닌 텍스트 편집기 사이에서 변경될 수 있는 사항은 1. TAB 키를 누를 때 발생하는 상황 또는 2. 소스 코드 공간에서 탭 문자를 만날 때 편집기가 표시하는 양입니다. 경험상 규칙은 들여쓰기를 원하는 대로 설정하고 탭을 8로 유지하는 것입니다. 그러나 이는 또 다른 논쟁입니다.
이제 코드로 돌아갑니다. 문제는 EMW 구분 기호입니다. 이 구문을 사용하면 EMW 줄을 들여쓰기할 수 없으며(공백이나 탭으로) 줄의 시작 부분에 있어야 합니다. 그렇지 않으면 구분 기호 상태가 손실됩니다.
따라서 한 가지 해결책은 다음과 같습니다.
bash /dev/fd/10 10<<'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
....
....
EMW
Some other command.
EOT
apache2.conf
또한 (위의 기호)의 내용은 ....
들여쓰기하면 안 됩니다. 그렇지 않으면 들여쓰기가 됩니다 apache2.conf
.
전체 bash 코드를 들여쓰려면 다음 구문을 사용하십시오.
bash /dev/fd/10 10<<-'EOT'
Some command.
cat << EMW >> /etc/apache2/apache2.conf
....
....
EMW
Some other command.
EOT
여기서 들여쓰기에 사용되는 선행 공백은 원하는 수의 TAB 문자로 구성됩니다(공백이 아닌 TAB!).
나는 무엇을 바꾸었나요? 이 특정 구문을 10<<'EOT'
사용하려면 10<<-'EOT'
구분된 문서를 구문 분석할 때 선행 TAB 문자를 삭제해야 합니다 . 그런 다음 구분 기호 EMW
와 내용을 들여쓰기할 수 있습니다 apache2.conf
.