我有以下脚本逐行读取文件
_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,则需要先对其运行“dos2unix”命令,然后才能在 Unix/Linux 中使用它。
要查看是否是这种情况,您可以在输入文件上运行“od -Xc”命令以十六进制转储它 - 然后查找回车符/换行符而不是换行符。如果您看到像 \r\l 而不是 \n 这样的字符,那么您就找到了罪魁祸首。