有人可以解释一下吗?我运行了命令,如下所示
$ cat `bash`
$ ls
$ ctrl+D
这给了我一些意外的终端输出。
注意: bash
在回音中。
好问题!"意外的输出"是CAT打印CWD中LS发现的所有文件。详细说明如下:
在您的第一行:
$ cat `bash`
bash
零件实际上从您的原始外壳中产生了一个新的外壳,因为bash被backquotes封闭(后quotes意味着在此上下文中运行封闭的程序)
然后当您这样做时:
$ ls
这实际上是在新产卵的bash壳中完成的。它列出了新生成的bash shell所在的目录(应该与原件相同)。从本质上讲,这在第一步中将CAT命令更改为
$ cat file_1 file_2 ... file_x
(基本上是由LS返回的该目录中的所有文件。但是,您还没有看到这些结果您的新bash壳。)
最后,当您这样做时:
$ ctrl+D
它将从原始外壳产生的新bash壳退出,然后猫输出所有印刷到新外壳中的stdout(ls搜索结果)中的所有东西。
您可以验证我刚才说的话:
$ cd ~/
$ mkdir temp_test_dir
$ cd temp_test_dir
$ echo "some text for file1" > file1
$ echo "other text for file2" > file2
现在运行您的问题中的内容:
$ cat `bash`
$ ls
$ ctrl+D
这就是您应该看到的:
some text for file1
other text for file2
在某些顺序上,这只是猫输出LS。