简单命令的重定向部分是否会发生扩展?

简单命令的重定向部分是否会发生扩展?

来自 Bash 手册

3.7.1 简单命令扩展

当执行一个简单的命令时,shell 从左到右执行以下扩展、赋值和重定向。

  1. 解析器标记为变量赋值的单词(命令名称前面的单词)和重定向将被保存以供以后处理。

  2. 不是变量赋值或重定向的字会被扩展(请参见第 3.5 节 [Shell 扩展],第 21 页)。如果扩展后仍有任何单词,则第一个单词将被视为命令名称,其余单词将被视为参数。

  3. 重定向的执行方式如上所述(参见第 31 页第 3.6 节 [重定向])。

  4. 每个变量赋值中“=”后面的文本在赋值给变量之前都会经过波形符扩展、参数扩展、命令替换、算术扩展和引号删除。

它提到了简单命令的以下部分发生的扩展:命令名称、命令参数和赋值。

我想知道重定向部分是否也发生扩展?如果是,您能举一些例子吗?谢谢。

答案1

是的,如果您重定向到变量的值或命令替换的结果/从变量的值或命令替换的结果重定向,那么这将在步骤 2 中进行扩展。

示例(创建名为 的文件file):

outfile='file'
date >"$outfile"

但是,您不能这样做

redir='>'
date $redir file

因为这会date使用操作数>和来调用file。这是因为在步骤 1 中解析命令行时,上面没有“解析器标记为重定向的单词”。

相关内容