这是我的shell脚本和属性文件
test.sh
#!/bin/bash
source ./default.properties
echo $app_name
echo "$app_name =="
default.properties
app_name=TestApplication
开始时,我在我的intellij on Window中创建了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上创建的文件中是否有一些不可见的字符,或者某些编码问题?
答案 0 :(得分:2)
是的,你在行的末尾有一个DOS回车符,它指定了appName
变量。此控制字符使光标在大多数终端中移回到行的开头。
好抓;这里的大多数人甚至都没有意识到这是一个问题。 bash
tag wiki有一个关于解决此问题的部分。
Unix上的许多工具会将有问题的字符显示为^M
(control-M)或其八进制代码\015
;在十六进制中,它的字符代码为0x0D,在十进制中为13。
将来,如果你必须使用Windows编辑器,使用Unix行结尾保存,使用ftp
ASCII模式传输文件(这些天不是流行或安全的选项),或运行{{1转移后,在Unix上的文件上。
答案 1 :(得分:0)
正如threeee已经提到的那样,windows和linux中的不同编码存在问题。 你也可能遇到像“äöüß”这样的特殊字符的问题
您可以使用linux工具“recode” 示例:从ibmpc(带cr-lf的DOS到拉丁语)更改编码
recode ibmpc..lat1 test.sh
查看所有支持的字符集:
recode --list