shell如何处理命令行的内容以便执行?
- 首先是命令,然后是选项和参数。
- 将命令行分成段。
- 从开始到结束的过程。
答案1
bash
“shell”是、ksh
、以及所有的通用词zsh
。
对于所有这些 shell,都有一个手册页(例如man bash
),其中详细说明了命令在执行之前如何扩展(变量$foo
被内容替换,fu*
被替换fun funny
(提供这些文件 exixts)等)。
您可以使用调试简单的命令
echo my-command ${foo} fu*
|
可以通过在命令前设置 set -x 来调试更复杂的命令(例如具有管道 ( ))。
set -x
my-command ${foo} fu* | while read x
do
done
set +x
然而,这看起来像一个XY-问题。
答案2
命令行上的第一个字段是要执行的命令,由特殊变量 引用$0
。无论之后发生什么,都只是可执行文件的简单参数,称为$1
, $2
, ... $n
,$0
处理这些是 的责任,而不是 shell 的责任
答案3
解析(如其名称)命令行的过程是一个相当长且复杂的过程,需要一本书的一个子章节来使其合理,如下所示此处描述了 ksh(例如)。
一般来说,用非常简单的术语(无法公正地描述许多所需的细节),每个标记(主要受空格限制的单词)在被识别为参数后,按照从左到右的顺序进行处理,然后给出作为扩展参数的命令(重定向是特殊的)。
请阅读本书以获得更好的描述,理解上面的内容非常简单。