“单词”中的“单词名称”;执行命令;完成`

“单词”中的“单词名称”;执行命令;完成`

在 Bash 中,该命令的语法for为:

for name [ [in [words ...] ] ; ] do commands; done
  1. 但这个例子有效

    for f in ls *; do echo $f; done
    

    我认为这ls *是一个命令,不能用作words.相反,我们应该使用for f in *; do echo $f; done, 其中*文件名扩展可以用作单词。那么为什么上面的例子有效呢?

  2. 我认为为了ls * 用作words,我们必须使用命令替换:

    for f in $(ls *); do echo $f; done
    

    但这个例子并没有做与前一个例子完全相同的事情。这个会列出子目录的内容,而前一个只列出子目录,不列出子目录的内容。为什么两个示例之间存在这种差异?

答案1

ls只是一个单词,*并被 shell 扩展。

在第二个示例中,shell 首先展开,*然后ls调用它来列出结果。

相关内容