我的脚本中有以下内容:
OUTFILE=./output.log
echo "foo" >> ${OUTFILE}
当OUTFILE
是一个实际的文件路径时,它工作得很好。然而,有时我希望通过修改OUTFILE
来查看stdout上的输出,但它不起作用。我尝试了1
和&1
,它们都是带引号的和不带引号的,也都是空的
它一直在告诉我:
./foo.sh: line 2: ${OUTFILE}: ambiguous redirect
使用/dev/stdout
作为文件名。(请参阅">/dev/stdout"的可移植性。)
由于解析顺序问题,不能在变量中使用&1
。在执行变量扩展之前,会搜索重定向令牌以查找。所以当你使用:
$ o='&1'
$ echo >$o
外壳扫描重定向运算符并且看到CCD_ 7重定向运算符而不是CCD_。(而且一开始没有>>&
运算符,所以不管怎样,你的附加示例都不起作用。尽管bash的新版本确实有一个&>>
运算符供>> file 2>&1
使用。)
我猜你想做其中一个
打印到文件
OUTFILE=./output.log
echo "foo" >> "${OUTFILE}"
打印到标准输出
OUTFILE=/dev/stdout
echo "foo" >> "${OUTFILE}"
或者只是
echo "foo"
打印到文件和stdout
OUTFILE=./output.log
echo "foo" | tee "${OUTFILE}"