이 세 가지 추가 문자는 무엇입니까? 왜 그렇게 이상한 오류가 발생합니까? [복사]

이 세 가지 추가 문자는 무엇입니까? 왜 그렇게 이상한 오류가 발생합니까? [복사]

다음 두 파일을 확인하세요.

제 생각에는 완전히 똑같은 것 같지만, 파일 1의 크기는 41바이트이고 파일 2의 크기는 44바이트입니다.

이제 3개의 추가 문자는 신경쓰지 않겠습니다. 그러나 이러한 문자도 이상한 오류를 일으킬 것이라고 생각합니다. 이 파일을 복제하고 실행하면 파일 1은 정상적으로 실행되지만 파일 2는 라인 3에서 오류를 반환합니다. ./BasicCheck.sh: 3행: cd: case0: 해당 파일이나 디렉터리가 없습니다."

그렇다면 이 추가 문자는 무엇입니까? 왜 오류가 발생합니까? 이러한 오류를 수정하려면 어떻게 해야 합니까?

내 생각에는 그것들이 줄바꿈일 것입니다. 아마도 파일 1에는 Linux 기반 줄바꿈이 있고 파일 2에는 Windows 기반 줄바꿈이 있을 수 있습니다. 맞아? 왜 그런 오류가 발생합니까?

답변1

file명령은 문제를 지적합니다.

% file file*
file1: Bourne-Again shell script, ASCII text executable
file2: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

두 번째 스크립트는 "DOS" 형식입니다. 따라서 예상대로 작동하지 않습니다. 지금 으로 변환하면 dos2unix결과는 동일합니다

% dos2unix file2
dos2unix: converting file file2 to Unix format ...

% ls -l file1 file2
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:23 file1
-rw-r--r-- 1 sweh sweh 41 Mar 19 11:25 file2

Unix 명령과 함께 DOS 형식 파일을 사용하려고 하면 각 줄 끝에 control-M이 붙습니다. 그래서 다음과 같은 줄

a=b

true를 ab로 설정한 다음 control-M을 사용하여 간략하게 설정합니다 ^M.

a=b^M

모든 명령은 비슷하게 영향을 받습니다. 예를 들어 두 문자 명령이 포함된 간단한 줄은 ls존재하지 않는 세 문자 명령을 실행하려고 시도합니다.ls<control-M>

관련 정보