什么是命令?

Ale*_*yan 1 shell terminology command

当使用不同的术语代表不同的概念时,可以促进清晰的思维和清晰的沟通。

当两个概念非常相似但又不同时,这特别有用。

我们倾向于使用术语“命令”来表示两个非常相似但不同的概念。

概念 1:在命令行界面上输入的单个程序。

选项可能会传递给程序,但仍然只有 1 个程序正在使用。

例子):

$ ls
$ ls -alF
Run Code Online (Sandbox Code Playgroud)

这个概念被称为“命令”。

概念 2:在按 Enter 键指示 shell 处理之前在命令行界面上输入的任何内容。

例子):

$ ls -alF | head > output.txt; cat output.txt
Run Code Online (Sandbox Code Playgroud)

这个概念也称为“命令”。
即使根据前面的定义它包含 3 个不同的“命令”,情况也是如此。

对于那些希望使用不同术语来表示不同概念以便更精确地思考和交流想法的人来说,使用什么术语来表示这两个不同的概念最好?

ilk*_*chu 10

好吧,我想您可以阅读 Shell 命令语言规范,尤其是。2.9 外壳命令

本节介绍 shell 命令的基本结构。下面的命令描述各自描述了命令的格式,仅用于帮助读者识别命令类型,并不正式表示语法。[...] 每个描述都讨论了命令的语义;有关命令语言的正式定义,请参阅Shell Grammar

命令是以下之一:[简单命令、管道、列表、复合命令、函数定义]

下面是一个简单的命令ls这是“命令名称”:

ls -alF
Run Code Online (Sandbox Code Playgroud)

下面是一个管道,其中包含两个简单的命令:

ls -alF | head > output.txt
Run Code Online (Sandbox Code Playgroud)

下面是管道和简单命令的顺序列表(或只是列表):

ls -alF | head > output.txt; cat output.txt
Run Code Online (Sandbox Code Playgroud)

(话又说回来,您也可以将此处的第一个示例视为(退化)管道。)

下面是一个带有 AND 列表的列表,其中包含复合命令和简单命令的管道,列表中的下一个是另一个简单命令。

for x in a b c; do echo "$x"; done | cat -n && echo ok; echo end.
Run Code Online (Sandbox Code Playgroud)

(如果我正确地阅读了列表中的部分,如果您用换行符而不是 分隔命令;,那么它将是一个复合列表,但这已经是挑剔了。)

我真的不希望其他文档(或本网站上的帖子)仔细遵守(正确)使用这些确切的短语,因此尝试精确地使用它们进行交流可能会很困难。拥抱混乱。