![为什么使用 tee 时这个变量赋值不起作用?](https://linux22.com/image/30911/%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BD%BF%E7%94%A8%20tee%20%E6%97%B6%E8%BF%99%E4%B8%AA%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
考虑:
$ 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 不会获得输出,并且也不会真正执行,因为没有要创建的管道。