bash 문자열 기본 작업을 사용하여 문자열을 내 쉘 변수로 바꾸려고 합니다.
var1='123'
var2='2018-01-01'
var3='2018-01-02'
var4='myfunction('var1','var2','var3')'
var5=${var4/var1/$var1}
echo $var5
var5=${var5/var2/$var2}
echo $var5
var5=${var5/var1/$var3}
echo $var5
예상 출력:
myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
myfunction('123','2018-01-01','2018-01-02')
문자열이 뒤죽박죽된 실제 출력:
myfunction('123','var2','var3')
myfunction('123','2018-01-01','var3')
')function('123','2018-01-01','2018-01-02
여기서 마지막 두 문자가 처음 부분에서 이동되어 문자열의 처음 두 문자가 손실됩니다. SED를 사용하여 동일한 목적을 달성할 수 있습니다. 하지만 저는 bash 기본 문자열 조작이 예상대로 작동하지 않는 이유를 알아내려고 노력 중입니다. 여러 번 대체했기 때문인가요?
당신의 도움을 주셔서 감사합니다.
답변1
콘텐츠 끝에 캐리지 리턴(CR)이 있습니다 var3
. 인쇄 바로 뒤에 개행 문자(줄 바꿈, LF)가 오지 않으면 줄의 나머지 부분이 왼쪽 가장자리부터 인쇄되어 이미 인쇄된 줄의 시작 부분을 덮어씁니다.
표준 Unix 줄 종결자는 CR LF가 아닌 LF입니다.
dos2unix
파일에서 변수를 정의하거나 사용하는 스크립트 줄을 재정의합니다.