我的脚本中有以下内容:
OUTFILE=./output.log
echo "foo" >> ${OUTFILE}
当OUTFILE
是实际文件路径时,它可以正常工作。但是,有时我想通过修改OUTFILE
来查看stdout上的输出,但它不起作用。我尝试使用引用和不引用的1
和&1
,并将其留空。
它一直告诉我这个:
./foo.sh: line 2: ${OUTFILE}: ambiguous redirect
答案 0 :(得分:3)
我猜你想要做其中一个
OUTFILE=./output.log
echo "foo" >> "${OUTFILE}"
OUTFILE=/dev/stdout
echo "foo" >> "${OUTFILE}"
或只是
echo "foo"
OUTFILE=./output.log
echo "foo" | tee "${OUTFILE}"
答案 1 :(得分:2)
使用/dev/stdout
作为您的文件名。 (参见Portability of “> /dev/stdout”。)
由于解析订单问题,您无法在变量中使用&1
。在执行变量扩展之前,搜索重定向令牌。所以当你使用:
$ o='&1'
$ echo >$o
shell扫描重定向运算符并看到>
重定向运算符而不是>&
运算符。 (并且无论如何都没有>>&
运算符,因此您的附加示例无论如何都无效。虽然较新版本的bash确实有&>>
运算符用于>> file 2>&1
。)