这是我的 shell 脚本和属性文件
测试.sh
#!/bin/bash
source ./default.properties
echo $app_name
echo "$app_name =="
默认属性
app_name=TestApplication
开始时,我在我的 Windows 上的 intellij 中创建了 test.sh
和 default.properties
文件。然后我复制到 Linux 并执行 test.sh
。但是,我得到了结果:
TestApplication
==tApplication
然后我使用 vim 创建具有相同内容的新 default.properties
。我得到了正确的结果
TestApplication
TestApplication ==
使用 diff 命令,它们确实不同,但我没有发现不同之处
diff default.properties default.properties_2
1c1
< app_name=TestApplication
---
> app_name=TestApplication
我在 Windows 上创建的文件中是否有一些不可见的字符,或者一些编码问题?
最佳答案
是的,您在分配 appName
变量的行末尾有一个 DOS 回车符。在大多数终端中,此控制字符会使光标移回行首。
不错的收获;这里的大多数提问者甚至都没有意识到这是一个问题。 bash
tag wiki有一节是关于解决这个问题的。
Unix 上的许多工具会将有问题的字符显示为^M
(control-M)或其八进制代码\015
;十六进制是字符代码 0x0D,十进制是 13。
将来,如果您绝对必须使用 Windows 编辑器,使用 Unix 行尾保存,使用 ftp
ASCII 模式传输文件(现在不是流行或安全的选项),或者运行dos2unix
传输后在 Unix 上的文件。
关于linux - shell 错误地读取在 Windows 中创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33772046/