Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么在命令替换中输入重定向的工作方式不同?_Bash_Shell_File_Redirect_Command Substitution - Fatal编程技术网

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

Bash 为什么在命令替换中输入重定向的工作方式不同?,bash,shell,file,redirect,command-substitution,Bash,Shell,File,Redirect,Command Substitution,考虑以下情况: $ echo "abc" > file $ var=$(< file) $ echo "$var" abc $echo“abc”>文件 $var=$(

考虑以下情况:

$ echo "abc" > file
$ var=$(< file)
$ echo "$var"
abc
$echo“abc”>文件
$var=$(
在命令替换中,我们使用一个重定向和一个文件,文件的内容被变量正确捕获

但是,以下所有示例均不产生任何输出:

$ < file
$ < file | cat
$ < file > file2
$ cat file2
$<文件
$file2
$cat文件2
在所有这些情况下,命令的内容不会重定向到输出

那么,当重定向放在命令替换中与不放在命令替换中时,为什么会有区别呢?在命令替换块内部与外部时,重定向是否具有不同的功能?

$(
不是重定向;这只是命令替换的一个特例,它使用与输入重定向相同的语法

通常,输入重定向必须与命令相关联。有一个案例可以被认为是例外,那就是

$ > file

从技术上讲,它不是重定向,因为没有任何东西被重定向到文件,但是
文件仍然以写入模式打开,这会将其截断为0字节。

您应该使用
cat@anubhava:这是真的。甚至
cat文件
。但我不明白的是不同语法背后的原因。为什么
$(在
@anubhava中:我明白了,
语法只在命令替换内部有效。我认为内部或外部的命令将遵循相同的规则。从技术上讲,
$(
不是重定向;它是命令替换的一种特殊情况,看起来像重定向。