이 문서에서 공백 대신 탭을 사용해야 하는 이유는 무엇입니까? [복사]

이 문서에서 공백 대신 탭을 사용해야 하는 이유는 무엇입니까? [복사]

저는 개인적으로 Windows와 Linux를 사용하여 크로스 플랫폼 작업을 하고 때로는 .shNotepad++를 사용하여 파일을 편집합니다. 따라서 모든 파일의 탭 들여쓰기를 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와 같은 탭에서는 실행하지 않았던 것을 기억합니다. 왜냐하면 공백을 사용하는 것처럼 스크립트가 충돌했기 때문입니다.

내 질문:

내 질문은 실제로 다음 질문으로 구성될 수 있습니다. 나는 나 자신뿐만 아니라 다른 호기심 많은 사람들이 이것을 찾을 수 있도록 묻고 있습니다.

  1. 다른 here 문서에서 명령과 here 문서를 들여쓰기 위해 공백을 사용할 수 없는 이유는 무엇입니까?
  2. 내가 틀렸고 명령과 여기 문서를 다른 여기 문서에 공백 들여쓰기를 허용하는 해결 방법이 있다면 그게 무엇인가요?

답변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.

관련 정보