为什么使用 tee 时这个变量赋值不起作用?

为什么使用 tee 时这个变量赋值不起作用?

考虑:

$ FILE_NAME=`(cat somefile | head -1)` | tee -a dump.txt
$ echo $FILE_NAME

$ 
  1. 现在,为什么 的输出没有(cat somefile | head -1)达到 tee .. 的标准输入?
  2. 如果输出到达 tee,那么它可以将其复制到 dump.txt 文件和标准输出。
  3. 该变量也$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 不会获得输出,并且也不会真正执行,因为没有要创建的管道。

相关内容