2017-09-27 3 views
0

내 bash는 코드 file.sh :
배쉬 문자열 연결 생산하는 이상한 결과

username=$1 
pkgpath="/home/${username}_tmp.txt" 
echo $username 
echo $pkgpath 

이제 결과를 생산해야하는 명령 bash file.sh abc으로 스크립트를 실행 :

abc 
/home/abc_tmp.txt 

그러나 내가 갖는 출력을 is :

abc 
_tmp.txtc 

누군가이 동작이 발생하는 이유와 원하는 결과를 얻는 방법을 설명 할 수 있습니까?

내가 pkgpath="/home/${username}"을 사용하여 나에게주는 것을 언급하고 싶습니다
편집 /home/abc (원하는)하지만 pkgpath="${username}_tmp.txt"를 실행하는 나에게 _tmp.txt (이상한)를 제공합니다.

+0

당신은 여분의 문자'c'가 끝에있을 가능성이 없을 때 끝에 붙는 것을 말하고 있습니까? (확장되지 않은 변수 값은 제외). 명령 줄에서이 스크립트를 실행하고 있습니까? 우연히 Windows 편집기 (Notepad ++)의 스크립트를 편집 했습니까? – Inian

+0

방금 ​​복사/붙여 넣기를 내 컴퓨터에 붙여 넣었습니다. – Will

+0

실제로 RHEL5 데스크탑에 원격으로 로그인했지만 실제로는 데스크톱과 동일한 결과를 실행 해 보았습니다. – iammrmehul

답변

0

명령을 실행할 때 abc 뒤에 캐리지 리턴 문자를 삽입하는 것처럼 보입니다. 범인은 아마 당신의 터미널이거나 아니면 명령을 복사하여 복사하고 실현하지 않고 ^M을 포함하고 있습니다.

두 번째 줄에 bash가 출력하는 내용은 실제로 /home/abc^M_tmp.txt이며, 이는 _tmp.txtc으로 렌더링됩니다. 명령 출력을 less -R으로 파이프하여 쉽게 확인할 수 있습니다.

+0

예,^M 사실. 제발, 어떻게 해결할 수 있습니다 – iammrmehul

+0

이 답변을 참조한 후 : https://unix.stackexchange.com/questions/56024/bash-korn-shell-script-edited-on-windows-throws-error-m-not- 찾았습니다 난 장황한 텍스트로 끝나는 Windows 라인에서 끝나는 Unix 라인을 구현했고 문제가 해결되었습니다! – iammrmehul