쉘에서 문자열 연결

쉘에서 문자열 연결

config.ini 파일이 있습니다.

repo_path=ssh://git@localhost:10022/root/
dir_path=/home/vagrant/workspace/

그리고 해당 파일에서 내보내고 연결하기 위한 "script.sh"는 다음과 같습니다.

while read -r line; do export $line; done <config.ini
repo_name=$1
repo_path=$repo_path$repo_name'.git'
dir_path=$dir_path/$repo_name
echo $repo_path
echo $dir_path

따라서 스크립트를 실행할 때:

./script.sh sample

산출:

sample.gitlocalhost:10022/root/
/sampleagrant/workspace/

예상 출력:

ssh://git@localhost:10022/root/sample.git
/home/vagrant/workspace/sample

답변1

합리적인 설명은 데이터에 캐리지 리턴이 포함되어 있다는 것입니다.

sample.gitlocalhost:10022/root/
^^^^^^^^^^

즉, 문자열은 다음과 같습니다(C 언어 문자열 리터럴 표기법 사용).

"ssh://git@localhost:10022/root/\rsample.git"

참고는 \r캐리지 리턴을 의미합니다.

이를 터미널로 보내면 캐리지 리턴이 커서를 줄의 시작 부분으로 이동하여 접두어를 sample.git덮어씁니다 .ssh://...

이러한 "신비한 출력" 문제를 디버깅하려면 명령 출력을 바이너리 덤프 유틸리티로 파이프할 수 있습니다 od. 예를 들면 다음과 같습니다.

echo $strange | od -t c  # see characters with backslash notation, or -t x1 for hex

관련 정보