首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MAKE_LINTIAN_HAPPY和shell脚本中的单引号是做什么的?

MAKE_LINTIAN_HAPPY和shell脚本中的单引号是做什么的?
EN

Stack Overflow用户
提问于 2014-01-04 16:46:33
回答 1查看 72关注 0票数 1

在我遇到的sh脚本中,我找到了行

代码语言:javascript
复制
#\
MAKE_LINTIAN_HAPPY '

接近开始。

从标识符的名称来看,很清楚为什么要添加它。但是,,我的问题是:为什么这是合法的sh代码,它做什么(如果有的话)?

我之所以问这个问题,是因为它使GNU源-突出显示在这个脚本上毫无用处,因为它将在勾选后的所有文件解释为字符串。如果我知道为什么这是合法的,也许可以建议对语言定义文件进行编辑来解决这个问题。

我试图在man页面中寻找sh的线索

代码语言:javascript
复制
$ man sh|grep "\W'\W"

但是这些比赛似乎都没有帮助(虽然有很多比赛,所以如果有比赛的话,我可能会错过)。

我也不理解#\;我不知道这是否与这个问题无关。(Vim将把#\后面的行作为注释进行语法化,但是一个简单的测试表明sh确实执行了#\后面的行。)

下面是脚本开头的一个扩展节选:

代码语言:javascript
复制
#!/bin/sh
# [...]
#\
exec tclsh $0 -- "$@"

#\
MAKE_LINTIAN_HAPPY '

set PROG_VERSION "v1.27 17/06/2005"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-04 19:13:21

实际上,您正在查看的脚本不是shell (sh、bash、dash等)脚本,而是tclsh脚本。启动它时,实际上,首先启动/bin/sh。它执行的第一个命令是

代码语言:javascript
复制
exec tclsh $0 -- "$@"

这意味着它启动tclsh并将脚本文件传递给tclsh。现在tclsh开始解释脚本。它也有“#”作为行注释的开头,但是与sh不同的是,如果行尾转义,行注释可以扩展到下一行,因此是#\

因此,MAKE_LINTIAN_HAPPY行不是tclsh的命令,它只是被忽略了。tclsh执行的第一个命令是set PROG_VERSION ...

我不认识林田。这一行可能正是为了让lintian将文件的内容“曲解”为文本,因为否则它会认为它是sh脚本,并且会大声叫喊违反策略的行为。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20923740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档