Bash在我的awk部分中输出了“表达式中的无效字符”

时间:2014-10-29 22:03:00

标签: bash vim awk

我正在用gawk写一个小游戏,我正在使用安装了gawk的Raspberry Pi。 在Windows编辑器上保存我的代码以将文件移动到我的覆盆子后,我遇到了一些编码问题(必须删除一些讨厌的^ M字符)。该文件以UTF-8保存('locale'告诉我LANG = en_GB.UTF-8)。 :设置编码?在vim告诉我我也使用UTF-8(同样适用于:set fileencoding?)。

当我尝试执行保存为.sh脚本的代码时,解释程序停在第一个OR符号“|”

while ((FieldSize !~ /^[[:digit:]]+$/) || (FieldSize < 4))

错误信息是:表达式中无效的字符'squarishlooking char'。

我已经尝试了几个修复,我也查看了hexview中的文件,并且两个| -chars被正确识别为'7C',|的十六进制值在ascii图表中。

只有当我使用组合 AltGr - 7 将字符输入到vim时才会出现错误。如果我进入vim的INSERT模式并使用 Ctrl - V 124(这是ascii图表中的|的dez值),则不会发生错误。如果我在hexview中查看2个选项中的任何一个,则字符正确地嵌套在任一侧的空格字符(十六进制:20)之间 - &gt; 20 7c 7c 20.

我现在也在使用

突出显示我的vim中的nonascii-chars
syntax match nonascii "[^\x00-\x7F]"
highlight nonascii guibg=Red ctermbg=2

并且只有当我使用 altGr - 7 时才会突出显示管道字符。

总是使用 ctrl - V xxx在我的拙见中并不是一个非常可取的解决方案。 当我使用 AltGr - 7 来输入“|”时,我希望我的脚本能够工作。除了使用 ctrl - V 124 的解决方法之外,还有什么解决方法吗?

2 个答案:

答案 0 :(得分:1)

squarishlooking char表示它不是正常的管道。这是你的终端没有角色的东西。如果您无法通过xxd查看,那么您可能无法查看正确的文件/地点。

答案 1 :(得分:0)

这不是shell脚本,而是awk脚本。你看到shell抱怨说它不知道如何处理两个管道。这将是独立版本:

#!/usr/bin/gawk -f
# your code here

然后,您的操作系统将自动从HashBang(#!)中找出并运行gawk

或者,这也可以通过首先运行一个调用awk命令的新shell来实现:

#!/usr/bin/env sh
awk 'your awk code here'