古腾标签!我在所有与 Bash 相关的事情上都是菜鸟。我正在熟悉语法,并且想知道该命令中的操作顺序是否如我所想。
命令:
echo 2 * 3 > 5 is a valid inequality
来自 Cameron Newham 的 Learning The Bash Shell
我相信顺序如下:
echo
被解释2
被读取并缓冲*
被解释,并且搜索被初始化- 当前文件夹中的每个匹配文件都会附加到缓冲区
3
被读取并缓冲> 5
被解释,并5
创建一个新文件,并且还重定向输出is
被读取并缓冲a
被读取并缓冲valid
被读取并缓冲inequality
被读取并缓冲echo
将缓冲区中的内容输出到5
提前致谢
答案1
我不会阅读 bash 源代码,但我怀疑它是否如您想象的那样发生,仅仅是因为最复杂的解释器在解释时不会执行某些操作,它们会读取整个语句,找出答案,然后执行。他们不会读取像 5 这样的一个符号,创建一个文件,然后继续读取和“缓冲”。
你(有时)需要知道的是 bash 的处理顺序:大括号扩展;波形符扩展、参数和变量扩展、算术扩展、命令替换;分词;文件名扩展;工艺替代。
哪一种回答了你的问题......由于分词是最后阶段之一,而不是第一阶段,因此它很难在阅读文本的过程中创建文件。
bash 的细节比大多数人想象的要复杂得多……这不是一件好事。这是一个深奥的大杂烩,可能需要完全重新设计才能实现。但是它就是这样啊。