考虑:
$ FILE_NAME=`(cat somefile | head -1)` | tee -a dump.txt
$ echo $FILE_NAME
$
- 现在,为什么 的输出没有
(cat somefile | head -1)
达到 tee .. 的标准输入? - 如果输出到达 tee,那么它可以将其复制到 dump.txt 文件和标准输出。
- 该变量也
$FILE_NAME
不会接收值。
答案1
你可能想写
FILE_NAME=`(cat somefile | head -1) | tee -a dump.txt`
echo $FILE_NAME
(或者head -1 somefile
摆脱猫)
` 之外的管道更多的是逻辑错误。您可能认为这是一个语法错误,但这不是 Bash 的工作方式,它只是没有给出预期的结果。
同样在没有变量赋值的情况下进行比较:
$ echo hello > somefile
$ `(cat somefile | head -1)` | tee -a dump.txt
bash: hello: command not found
somefile 的第一行不会回显到 stdout,而是解释为命令。由于该命令无法执行,因此 tee 不会获得输出,并且也不会真正执行,因为没有要创建的管道。