다른 파일에서 추출된 일부 변수를 인쇄하는 간단한 스크립트를 작성하려고 합니다. 모든 변수가 정의된 후 목표는 다음 줄을 인쇄하는 것입니다.
-나쁜 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \
따라서 여기서 복잡한 점은 변수뿐만 아니라 - 를 포함한 다른 많은 기호도 인쇄해야 한다는 것입니다. \ 끝에 개행 문자가 필요합니다.
나는 열심히 노력했다
echo " -bad 0.0 -aswap -AMX -decim $decim -dspfvs $dspfvs -grpdly $grpdly \\"
이것은 분명히 작동하지 않으며 다음과 같은 이상한 출력을 얻습니다.
\rpdly 67ecim 1792
여기서 67과 1792는 내 변수 $grpdly 및 $decim입니다.
도움을 주셔서 미리 감사드립니다!
답변1
이것이 모든 것을 설명하지는 않지만 적어도 문제의 일부는 값 끝에 캐리지 리턴이 있다는 것입니다. 이는 다음과 같이 인쇄된다는 것을 의미합니다.
-bad 0.0 -aswap -AMX -decim 1792<CR>
-dspfvs something<CR>
-grpdly 67<CR>
\\
...각 "줄"은 줄 바꿈이 아닌 캐리지 리턴으로 구분되기 때문에 이전 줄 위에 인쇄된다는 점만 제외됩니다. 이제 방금 설명한 내용을 출력과 비교해 보면 정확하게 일치하지 않으므로(제 경우 "\pdly 6792swap -AMX -decim 1792" 제공) 어떤 이유로든 또 다른 것이 있다고 생각합니다.
그 이유는 아마도 읽고 있는 파일이 각 줄의 끝에서 캐리지 리턴과 줄 바꿈을 사용하는 DOS/Windows 형식이기 때문일 것입니다. 유닉스에서는 줄 바꿈만 사용하고 캐리지 리턴을 해당 부분으로 처리하는 경향이 있습니다. 마지막에 변수로 읽는 것과 같은 줄 내용... 당신이 얻는 것과 같습니다. 한 가지 옵션은 또는 유사한 프로그램을 사용하여 dos2unix
파일을 유닉스 형식으로 변환하는 것입니다. 또 다른 방법은 다음과 같이 파일에서 읽을 때 캐리지 리턴을 제거하는 것입니다.
set decim = `cat decimfile | tr -d '\r'`
(해당 섹션 대신 사용한 실제 명령을 사용하십시오 cat
.) 또는 변수를 읽은 후 변수를 지울 수 있습니다.
set decim = `echo $decim | tr -d '\r'`
캐리지 리턴을 "작성"하는 방법에는 다양한 규칙이 있습니다. 저는 항상 " <CR>
"를 사용했지만 tr
"\r"도 이해합니다. 반면 일부 다른 프로그램에서는 "^m" 또는 "^M"을 사용합니다.