【发布时间】:2012-07-11 22:34:21
【问题描述】:
所以我有一个名为 try.sh 的简单 shell 脚本:
#! /bin/ksh
echo "'" | awk '
/'\''/ {
print "'\''ello, world"
}
'
它运行良好:
$ ./try.sh
'ello, world
但是 ksh -n 对此并不完全满意:
$ ksh -n ./try.sh
./try.sh: warning: line 3: ' quote may be missing
./try.sh: warning: line 5: ' quote may be missing
我可以使用技巧(awk 变量、awk 十六进制序列等)来解决这个问题,但肯定有一些本机优雅的方法来安抚 ksh 语法检查器(如果没有别的,对于嵌入式语言有没有提供变通办法)。我忘记了什么?
[更新:显然语法检查器正在标记该行,因为带有嵌入换行符的带引号的字符串后面跟着另一个没有中间空格的带引号的字符串。 David Korn 说他将审查下一个版本的 ksh 的检查。详情请见the ast-users mailing list archives。]
【问题讨论】:
-
将特定调用的 stderr 重定向到
2>/dev/null? ...我也喜欢整洁的东西,但考虑到警告状态,我只会将此作为“功能”;-)...祝你好运。 -
@shellter 好主意,除了调用是通过安装的通用规则(基础 nmake 制定规则的一部分,用于处理所有 shell 脚本)。我可以在关联的
Makefile中为这个特定的脚本写一条规则,但这会冒犯我的敏感;-) -
在 [ast-users] 邮件列表中重复。
-
这基本上是在同一脚本中混合语言的问题。在这种情况下,它有三层深度:nmake->shell->nawk。我竭尽全力避免这种情况并保持可读性。