나는 이것을 bash 스크립트에 가지고 있습니다
DAY2="20130605"<Cr>
echo "This is yesterday date:"$DAY2"end"
출력이 다음과 같은 이유는 무엇입니까? 캐리지 리턴 문자가 있는 것 같은데 DAY2
어디서 나오는 걸까요?
ends is yesterday date:20130605
답변1
Enter를 누르면 커서가 줄의 시작 부분으로 돌아갑니다. 출력 문자열은 다음과 같습니다:
This is yesterday date:20130605<Cr>end
터미널이 클릭되지 않는 한<Cr>
커서를 줄의 시작 부분으로 되돌리고 거기에 있는 문자를 덮어씁니다..
즉, "Thi"가 "end"로 대체되어 다음이 생성됩니다.
ends is yesterday date:20130605
수행하려는 작업을 수행하려면 스크립트는 다음과 같아야 합니다.
variable="text"
echo "Some sentence $variable"
어느 것이 출력될 것인가
Some sentence text
잘못된 캐리지 리턴이 있는 경우 ^M
( vi
Bruce가 말했듯이) 로 표시되어야 합니다.
솔루션 1
캐리지 리턴이나 기타 인쇄되지 않는 문자를 제거하는 가장 좋은 방법은 단일 문자의 모든 인스턴스를 제거하는 tr
옵션과 함께 명령을 사용하는 것입니다. 여기서 캐리지 리턴 문자의 이스케이프 시퀀스는 다음과 같습니다.-d
\r
tr -d '\r'
그러면 모든 캐리지 리턴이 제거됩니다. 스크립트에서 다음을 실행하여 캐리지 리턴의 모든 인스턴스를 제거한 다음 원본 스크립트 파일을 덮어씁니다.
tr -d '\r' yourscript.bash > temp
mv temp yourscript.bash
솔루션 2
또는 vi
스크립트를 열 때 다음을 입력하십시오.
:%s/\r//g
:wq
문서에서 캐리지 리턴을 제거하려면 문서를 저장하세요.
답변2
캐리지 리턴을 나타내는 경우 <Cr>
첫 번째 줄 끝에서 캐리지 리턴을 제거합니다. 귀하가 수행할 수 있는 작업은 다음과 같습니다.
sed -i '1s/\r//' script.sh
스크립트에서 캐리지 리턴을 보려면 다음 명령을 실행하십시오.
od -c script.sh | grep --color=yes '\r'
답변3
문제의 bash 스크립트를 사용하거나 vi
확인 하세요. vim
잘못된 캐리지 리턴이 "^M"(캐럿, em) 두 문자 시퀀스로 표시되어야 합니다. hjkl을 사용하여 커서를 캐리지 리턴으로 이동하고 "x"를 클릭하여 삭제한 다음 ":wq"를 클릭하여 종료합니다 vi
.
내 생각엔 누군가 파일을 Windows 컴퓨터로 이동하고 메모장이나 워드패드로 편집한 다음 다시 Linux로 이동하면 잘못된 캐리지 리턴이 파일에 나타나는 것 같습니다.
답변4
캐리지 리턴 문자가 어떻게 생성되는지 정확하게 말하기는 어렵습니다.
스크립트가 다른 스크립트나 애플리케이션에 의해 생성된 경우 버그이거나 의도적인 사고일 수 있습니다.
CR
파일을 편집하는 사람이 실수로 삽입을 유발한 키 조합을 눌렀을 가능성이 있습니다.
예:
vim :
Ctrl-v Ctrl-memacs:
Ctrl-q Ctrl-m- 다른 많은 것들이 있습니다.
코드에 줄 바꿈이 없는 등 문제를 일으킬 수 있는 다른 문자도 있습니다. 이로 인해 스크립트를 실행하거나 코드를 컴파일할 때 종종 이상한 오류가 발생합니다.
저는 보통 이 기능 vim
을 자주 사용하고 설정합니다(토글할 수 있는 키 조합이 있습니다):
match Error /[^ -~\t]/
즉, ASCII와 with를 사용하여 <space>
일반적으로 빨간색 배경에 흰색 텍스트 등을 제외한 모든 콘텐츠를 강조 표시합니다.~
tab
Error
코드 파일의 경우 일반적으로 기본적으로 열어 둡니다.
터미널에서 캐리지 리턴은 일반적으로 커서를 줄의 시작 부분으로 이동하게 하므로 인쇄할 때 줄 바꿈이 발생할 때까지 해당 줄의 기존 텍스트를 덮어씁니다.
예를 들어:
#!/bin/bash
for i in {1..100}; do
printf "We are now at %3d%%\r" "$i"
sleep .1
done
printf "\nAll done.\n"
\r
printf
, 결과 <CR>
또는 캐리지 리턴을 사용할 때 . , 결과 또는 개행 문자를
\n
사용할 때 .printf
<LF>