这是一个我知道的愚蠢问题,而且我直觉地认为我知道答案,但我无法通过任何独立文件证实这一点。
如果你看一下官方的POSIX shell语法,它有一个这样的起始符号:
%start complete_command
%%
complete_command : list separator
| list
;
所以,等等,如果我们有一个shell脚本,那么整个脚本就是一个巨大的"完整的命令"根据语法规则?是吗?
答案 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的努力,他的回答让我发现了愚蠢的地方。
我发布的语法片段不足以回答这个问题。真的需要整个语法。如果仔细研究整个语法,那么可以看出答案必须是:
不,整个脚本不是“完整命令”。在输入开始时识别“完整命令”,然后可能识别下一个命令,依此类推。