Bash脚本-标准输出文件描述符?

Bash脚本-标准输出文件描述符?,bash,stdout,Bash,Stdout,我的脚本中包含以下内容: OUTFILE=./output.log echo "foo" >> ${OUTFILE} 当OUTFILE是实际的文件路径时,它可以正常工作。但是,有时我希望通过修改OUTFILE在stdout上查看输出,但它不起作用。我尝试了1和&1,包括引号和未引号,并将其保留为空。 它一直在告诉我: ./foo.sh: line 2: ${OUTFILE}: ambiguous redirect 我猜你想做其中一个 打印到文件 打印到标准输出 或者只是 echo

我的脚本中包含以下内容:

OUTFILE=./output.log
echo "foo" >> ${OUTFILE}
OUTFILE
是实际的文件路径时,它可以正常工作。但是,有时我希望通过修改
OUTFILE
在stdout上查看输出,但它不起作用。我尝试了
1
&1
,包括引号和未引号,并将其保留为空。
它一直在告诉我:

./foo.sh: line 2: ${OUTFILE}: ambiguous redirect

我猜你想做其中一个

打印到文件 打印到标准输出 或者只是

echo "foo"
打印到文件和标准输出
使用
/dev/stdout
作为此文件的文件名。(见附件。)

由于解析顺序问题,无法在变量中使用
&1
。在执行变量扩展之前,将搜索重定向令牌。因此,当您使用:

$ o='&1'
$ echo >$o

shell扫描重定向操作符并查看
重定向操作符而不是
&
操作符。(而且没有一个
>&
操作符开始使用,所以你的附加示例无论如何都不起作用。虽然较新版本的bash确实有一个
&>
操作符用于
>文件2>&1
使用。)

你说的是什么意思?您是要写入文件和标准输出,还是只是标准输出?如果前者停止给出不好的建议,您的第一条评论也会给出语法错误,甚至没有意义。
echo "foo"
OUTFILE=./output.log
echo "foo" | tee  "${OUTFILE}"
$ o='&1'
$ echo >$o