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,则需要先对其运行“dos2unix”命令,然后才能在 Unix/Linux 中使用它。

要查看是否是这种情况,您可以在输入文件上运行“od -Xc”命令以十六进制转储它 - 然后查找回车符/换行符而不是换行符。如果您看到像 \r\l 而不是 \n 这样的字符,那么您就找到了罪魁祸首。

相关内容