获取“模糊redirect”错误

在我的Bash脚本中的以下行

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

给我这个错误:

  line 46: ${OUPUT_RESULTS}: ambiguous redirect 

为什么?

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 

在variables周围添加引号似乎是处理“模棱两可的redirect”消息的好方法:当你犯了一个input错误时,你往往得到一个更好的信息 – 当错误是由于文件名中的空格造成的,使用引号是修复。

你有一个名为OU PUT_RESULTS的variables,还是更可能是OUT PUT_RESULTS


 michael@isolde:~/junk$ ABC=junk.txt michael@isolde:~/junk$ echo "Booger" > $ABC michael@isolde:~/junk$ echo "Booger" >> $ABB bash: $ABB: ambiguous redirect michael@isolde:~/junk$ 

把你的variables的引号。 如果碰巧有空格,它也会给你“模棱两可的redirect”。 也检查你的拼写

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

例如模棱两可的redirect

 $ var="file with spaces" $ echo $AAAA" "$DDDD" "$MOL_TAG >> ${var} bash: ${var}: ambiguous redirect $ echo $AAAA" "$DDDD" "$MOL_TAG >> "${var}" $ cat file\ with\ spaces aaaa dddd mol_tag 

$ {OUPUT_RESULTS}中指定的path是否包含任何空格字符? 如果是这样,你可能要考虑使用... >> "${OUPUT_RESULTS}" (使用引号)。

(您可能还想考虑将您的variables重命名为${OUTPUT_RESULTS}

我最近发现,redirect文件名称中的空白将导致“模棱两可的redirect”消息。

例如,如果您redirect到application$(date +%Y%m%d%k%M%S).log并且指定了错误的格式化字符,则redirect将在上午10点之前失败。 但是,如果您使用application$(date +%Y%m%d%H%M%S).log它将成功。 这是因为%k格式在9AM产生' 9' ,其中%H在9AM产生'09'

echo $(date +%Y%m%d%k%M%S)给出20140626 95138

echo $(date +%Y%m%d%H%M%S)给出20140626095138

错误的date可能会给出类似的东西:

 echo "a" > myapp20140626 95138.log 

以下是所期望的:

 echo "a" > myapp20140626095138.log 

我只是有一个bash脚本中的这个错误。 这个问题在上一行的结尾是一个偶然的错误。

另外一个可能导致“模棱两可的redirect”的东西是\t \n \r也在你写的variables名中

也许不是\n\r ? 但是在谨慎的方面犯错

尝试这个

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

我在parsingHTML,Tabs \t的时候碰到了这一行。