ksh print命令显示其他字符

时间:2017-05-29 13:07:24

标签: shell printing scripting ksh

我有一个名为DB_DIALECT的变量,它应该包含一个字符串" org.hibernate.dialect.SQLServerDialect"。该字符串从CSV文件导出。

当我尝试打印像

这样的DB_DIALECT内容时
print -r ${DB_DIALECT}

我得到以下输出(重复最后3个字母)

org.hibernate.dialect.SQLServerDialect  
etc

通过追踪和错误我发现这样的事情解决了问题

print -r ${DB_DIALECT} | sed 's/[[:digit:]]//g'

由于我是shell脚本的新手,因此对我来说没有多大意义。有人可以解释为什么重复那些最后的人物了吗?

我无法弄清楚的另一件事是

的输出
print -r ${DB_DIALECT} | od -c

0000000   o   r   g   .   h   i   b   e   r   n   a   t   e   .   d  i
0000020   a   l   e   c   t   .   S   Q   L   S   e   r   v   e   r  D
0000040   i   a   l   e   c   t  \n 
0000047   
t  \n 
0000053

1 个答案:

答案 0 :(得分:1)

'od -c'(字符)显示你在预期的字符串末尾有一些额外的字符;不幸的是,很难确切地说出这些角色是什么。 (“呃,马克!”?)。

'od -d'(十进制)或'od -x'(十六进制)的输出可能更有用,因为它们应显示 extra 字符的十进制/十六进制值。 / p>

与此同时,更大的问题是:那些额外的字符是如何进入变量的?

答案是:您需要提供有关该CSV文件的内容和格式的更多详细信息,CSV文件的来源/方式(可能有助于确定格式),以及您的命令用于填充DB_DIALECT变量。