![': 읽기에 유효한 식별자가 아닙니다.](https://rvso.com/image/1539553/'%3A%20%EC%9D%BD%EA%B8%B0%EC%97%90%20%EC%9C%A0%ED%9A%A8%ED%95%9C%20%EC%8B%9D%EB%B3%84%EC%9E%90%EA%B0%80%20%EC%95%84%EB%8B%99%EB%8B%88%EB%8B%A4..png)
나는 Notepad++를 사용하고 다음을 입력합니다:
read s
echo "$s"
출력은 다음과 같습니다
그런 다음 세미콜론을 넣으려고 합니다.
read s;
echo "$s"
출력은 다음과 같습니다.
파일을 다른 이름으로 저장 q.sh
하고 cygwin으로 실행했지만 여전히 연산자를 사용할 수 없어 read
혼란스럽습니다. 다른 편집기도 사용해 보았지만 vi
결과는 동일합니다.
뭐가 잘못 되었 니? 어떻게 작동하게 만들까요?
답변1
쉘 스크립트를 구성하는 텍스트 파일은 Notepad++로 작성되었습니다. 이 편집기는 기본적으로 Unix 관점에서 \r
각 줄 끝에 불필요한 캐리지 리턴( )이 있는 DOS 텍스트 파일로 파일을 저장합니다. 이것은 혼란스럽다 sh
.
제거하려면:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
스크립트하다-line 이 부족 #!
하지만(주석에서 지적했듯이) 명시적 인터프리터( )로 실행하는 한 sh q.sh
필요하지 않습니다.
라인 추가하기
#!/bin/sh
(이후 chmod +x q.sh
) 실행을 ./q.sh
로 실행하는 것과 정확히 동일하게 동작 하도록 할 것입니다 sh q.sh
.
답변2
Notepad++에 액세스할 수 있는 경우 Unix용 캐리지 리턴을 변환하는 또 다른 방법입니다. 메모장에서 편집 -> EOL 변환 -> Unix(LF)로 이동합니다.
프랑스어에서는 다음과 같습니다. Edition -> Convertir les sauts de ligne -> Converti au format Unix(LF)
더 빠를 수 있습니다.