shell读取在Windows中创建的文件不正确

时间:2015-11-18 04:47:54

标签: linux shell character-encoding

这是我的shell脚本和属性文件

test.sh

#!/bin/bash
source ./default.properties
echo $app_name
echo "$app_name =="

default.properties

app_name=TestApplication

开始时,我在我的intellij on Window中创建了test.shdefault.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上创建的文件中是否有一些不可见的字符,或者某些编码问题?

2 个答案:

答案 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
相关问题