我有一个带有以下命令的.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
答案 0 :(得分:1)
您可以尝试将echo命令卸载到单独的shell脚本,例如
target:
sh generate_code.sh $(var1) $(var2) $(var3) > $@
和generate_code.sh包含
#!/bin/sh
echo "char _${1}_b_[] = \"@(#) $1 $2 $3\";"