为什么在命令替换时输入重定向的工作方式不同?

时间:2016-10-22 16:06:29

标签: bash shell file redirect command-substitution

考虑以下情况:

$ echo "abc" > file
$ var=$(< file)
$ echo "$var"
abc

在命令替换中,我们使用重定向和文件,并且变量正确捕获文件的内容。

但是,以下所有示例都不会产生输出:

$ < file
$ < file | cat
$ < file > file2
$ cat file2

在所有这些情况下,命令的内容不会重定向到输出。

那么为什么重定向被置于命令替换之内会有什么不同呢?当内部与命令替换块之外时,重定向是否具有不同的功能?

1 个答案:

答案 0 :(得分:1)

$(< file)不是重定向;它只是命令替换的一种特殊情况,它使用与输入重定向相同的语法。

通常,输入重定向必须与命令相关联。有一种情况可以说是一种例外,即

$ > file

从技术上讲,它不是重定向,因为没有任何内容重定向文件,但file在写入模式下仍然打开,这会截断它为0字节。