是整个shell脚本a"完整命令"通过语法?

时间:2016-09-11 06:44:51

标签: shell posix yacc

这是一个我知道的愚蠢问题,而且我直觉地认为我知道答案,但我无法通过任何独立文件证实这一点。

如果你看一下官方的POSIX shell语法,它有一个这样的起始符号:

%start  complete_command
%%
complete_command : list separator
                 | list
                 ;

所以,等等,如果我们有一个shell脚本,那么整个脚本就是一个巨大的"完整的命令"根据语法规则?是吗?

2 个答案:

答案 0 :(得分:3)

有趣的是,older version of the POSIX documentation (1997)声明:

  

语法的开始符号( complete_command )代表   从命令行输入或一个shell脚本

但目前的规格中不再存在这种情况。

最近POSIX discussions似乎暗示shell脚本实际上应该被视为complete_commands的序列:

  

一旦语法识别出complete_command符号(参见   [xref to 2.10 Shell Grammar]), complete_command 应受到约束   别名替换(见[xref to 2.3.1 Alias Substitution])然后   在下一个complete_command被标记化并解析之前执行

答案 1 :(得分:0)

这是一个愚蠢的问题,就像我在开始时说的那样......我可以删除它但是 - 这不会解释jlliagre的努力,他的回答让我发现了愚蠢的地方。

我发布的语法片段不足以回答这个问题。真的需要整个语法。如果仔细研究整个语法,那么可以看出答案必须是:

不,整个脚本不是“完整命令”。在输入开始时识别“完整命令”,然后可能识别下一个命令,依此类推。