Cygwin bash:寻找匹配的“”时意外的EOF

时间:2014-03-05 12:01:28

标签: windows bash makefile cygwin eof

我有一个带有以下命令的.rules文件:

echo "char _$(var1)_b_[] = \"@(#) $(var1) $(var2) $(var3)\";" > $@

通过cygwin bash处理此文件我遇到以下错误:

echo "char _a_b_[] = \"@(#) abc 1.2.3 [03/05/2014 064 01:10]\";" > file.c

_a_b_[]: -c: line 1: unexpected EOF while looking for matching `"'

_a_b_[]: -c: line 2: syntax error: unexpected end of file

在Linux上运行正常。 我试图用一个单引号替换双引号:

echo 'char _$(var1)_b_[] = "@(#) $(var1) $(var2) $(var3)";' > $@

但它对我没有帮助。这个命令出了什么问题?

UPD

我发现由于空格特征而引发错误。命令

echo 'char _$(var1)_b_[] = "@(#) $(var1)";' > $@

失败,但是这个

echo 'char _$(var1)_b_[] = "@(#)$(var1)";' > $@

没关系。看起来像bash认为$(var1)是一个新命令,找不到所需的引用:

echo " " > file.c
\ > file.c: -c: line 1: unexpected EOF while looking for matching `"'
\ > file.c: -c: line 2: syntax error: unexpected end of file

1 个答案:

答案 0 :(得分:1)

您可以尝试将echo命令卸载到单独的shell脚本,例如

target:
        sh generate_code.sh $(var1) $(var2) $(var3) > $@

和generate_code.sh包含

#!/bin/sh
echo "char _${1}_b_[] = \"@(#) $1 $2 $3\";"