BASH 문자열 연결은 "^M" 문자를 추가합니다.

BASH 문자열 연결은 "^M" 문자를 추가합니다.

파일을 한 줄씩 읽는 다음 스크립트가 있습니다.

_PATH=$(pwd)
LOCATION_PATH="$_PATH/inventory.sh"
LETTER="l"
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo $line >> file2.test
    CALL="${LOCATION_PATH} ${line} ${LETTER} 1234"
    echo $CALL >> file.test
    echo =========
    RESULT=$($CALL)
    #echo $RESULT
done < "$1"

그러나 각 줄의 입력 파일 ^M에는 (캐리지 리턴) 문자가 없지만 file.test 파일의 출력에는 아래와 같이 이러한 문자가 포함됩니다.

/.../inventory.sh 00000e99-bce9-11e4-8418-06e8ce2b06d8^M l 1234
/.../inventory.sh 0001688b-bce7-11e4-8418-06e8ce2b06d8^M l 1234

file2.test의 출력에도 ^M문자가 없습니다.

다음을 교체해 보았습니다.

SP=" "
LE="l"
...    
    CALL="${LOCATION_PATH}${SP}${line}${SP}${LE}${SP}1234"

소용이 없습니다.

답변1

^M은 Windows의 줄 종결자이므로 ${line} 변수를 제공하여 Windows에서 입력 데이터를 생성했음을 의미합니다. Windows에서 편집한 파일을 Linux로 전송하는 경우 Unix/Linux에서 사용하기 전에 "dos2unix" 명령을 실행해야 합니다.

이러한 경우인지 확인하려면 입력 파일에서 "od -Xc" 명령을 실행하여 16진수로 덤프한 다음 개행 대신 캐리지 리턴/줄 바꿈을 찾아보세요. \n 대신 \r\l과 같은 문자가 표시되면 범인을 찾은 것입니다.

관련 정보