Bash脚本中的下面一行

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

给我这个错误:

 line 46: ${OUPUT_RESULTS}: ambiguous redirect

Why?


当前回答

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

(你也可以考虑将你的变量重命名为${OUTPUT_RESULTS})

其他回答

你有一个名为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$ 

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

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

试试这个

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

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

如果脚本的重定向包含一个变量,并且脚本主体在括号括起来的部分中定义了该变量,则会得到"ambiguous redirect"错误。这里有一个可重复的例子:

Vim a.sh来创建脚本 编辑脚本包含(logit="/home/ubuntu/test.log" && echo "a") >> ${logit} Chmod +x a.sh使其可执行 a.sh

如果你这样做,你会得到“/home/ubuntu/a.sh: line 1: $logit: ambiguous redirect”。这是因为

在括号之间放置一列命令会导致子shell ,并且其中的每个命令都将在其中执行 子shell,无需删除非导出变量。因为列表是 在子shell中执行时,变量赋值不会保持有效 在subshell完成之后。”

从使用括号对表达式进行分组和展开

为了纠正这个问题,你可以在步骤2中修改脚本,定义圆括号外的变量:logit="/home/ubuntu/test.log" && (echo "a") >> $logit

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

例如: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

如果在shell命令中使用变量名,则必须将其与+号连接。

例如:

如果您有两个文件,并且您不打算硬编码文件名,而是希望使用变量名 "input.txt" = x "output.txt" = y

然后('shell command within quotes' + x > + y)

它将以这种方式工作,特别是如果你在os的python程序中使用它。系统命令可能