파일을 한 줄씩 읽는 다음 스크립트가 있습니다.
_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과 같은 문자가 표시되면 범인을 찾은 것입니다.