获得"模糊重定向"错误

Ope*_*way 155 bash

我的Bash脚本中的以下行

 echo $AAAA"     "$DDDD"         "$MOL_TAG  >>  ${OUPUT_RESULTS}
Run Code Online (Sandbox Code Playgroud)

给我这个错误:

 line 46: ${OUPUT_RESULTS}: ambiguous redirect
Run Code Online (Sandbox Code Playgroud)

为什么?

nob*_*bar 250

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
Run Code Online (Sandbox Code Playgroud)

在变量周围添加引号似乎是处理"模糊重定向"消息的好方法:当您输入错误时,您倾向于获得更好的消息 - 并且当错误是由文件名中的空格引起时,使用引号是修复.


JUS*_*ION 22

你有一个名字变量,OUPUT_RESULTS或者它更有可能OUTPUT_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$ 
Run Code Online (Sandbox Code Playgroud)

  • 如果你的`ABC="junk file.txt"`,这仍然会有问题。 (2认同)

gho*_*g74 14

在变量周围加上引号.如果碰巧有空格,它也会给你"模糊的重定向".还检查你的拼写

echo $AAAA"     "$DDDD"         "$MOL_TAG  >>  "${OUPUT_RESULTS}"
Run Code Online (Sandbox Code Playgroud)

例如模棱两可的重定向

$ 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
Run Code Online (Sandbox Code Playgroud)

  • @ttmrichter,这很重要! (3认同)

Tho*_*mas 5

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

(您可能还想考虑将变量重命名为${OUTPUT_RESULTS})


Aix*_*nes 5

我最近发现重定向文件名称中的空格会导致"模糊重定向"消息.

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

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

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

错误的日期可能会给出类似的结果:

echo "a" > myapp20140626 95138.log
Run Code Online (Sandbox Code Playgroud)

以下是您想要的:

echo "a" > myapp20140626095138.log
Run Code Online (Sandbox Code Playgroud)