Bash脚本中的下面一行

 echo $AAAA"     "$DDDD"         "$MOL_TAG  >>  ${OUPUT_RESULTS}

给我这个错误:

 line 46: ${OUPUT_RESULTS}: ambiguous redirect

Why?


当前回答

在我的例子中,这是一个有用的警告,因为目标变量(不是文件)拼写错误并且不存在。

echo "ja" >> $doesNotExist

导致

./howdy.sh: line 4: $doesNotExist: ambiguous redirect

其他回答

另一个可能导致“模糊重定向”的东西是你所写的变量名中的\t \n \r

也许不是\n\r?但宁可慎之又慎

试试这个

echo "a" > ${output_name//[$'\t\n\r']}

我在解析HTML时遇到了这个问题,tab \t在行首。

Bash有时很迟钝。

对于基本相同的错误,下面的命令都会返回不同的错误消息:

$ echo hello >
bash: syntax error near unexpected token `newline`

$ echo hello > ${NONEXISTENT}
bash: ${NONEXISTENT}: ambiguous redirect

$ echo hello > "${NONEXISTENT}"
bash: : No such file or directory

在变量周围添加引号似乎是处理“模糊重定向”消息的好方法:当您犯了键入错误时,往往会得到更好的消息——当错误是由文件名中的空格引起时,使用引号是解决办法。

在我的例子中,这是一个有用的警告,因为目标变量(不是文件)拼写错误并且不存在。

echo "ja" >> $doesNotExist

导致

./howdy.sh: line 4: $doesNotExist: ambiguous redirect

在尝试使用大括号展开将输出写入多个文件时,我得到了此错误。

例如:echo "text" > {f1,f2}.txt将导致-bash: {f1,f2}.txt:模糊重定向

在这种情况下,使用tee输出到多个文件:

echo "text" | tee {f1,f2,...,fn}.txt 1>/dev/null

1>/dev/null将阻止将文本写入标准输出

如果你想追加到文件中,使用tee -a

对于我的例子,如果我通过env指定输出文件(例如$ENV_OF_LOG_FILE),那么将得到错误模糊重定向。

但是,如果我使用纯文本作为文件路径(例如/path/to/log_file),那么就没有错误。