我有一个.rules文件,使用下面的命令:
echo "char _$(var1)_b_[] = \"@(#) $(var1) $(var2) $(var3)\";" > $@
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上,它工作正常。 我试图用一个单引号replace双引号:
echo 'char _$(var1)_b_[] = "@(#) $(var1) $(var2) $(var3)";' > $@
但这对我没有帮助。 这个命令有什么问题?
UPD
我发现这个错误是由于空间特性而引起的。 命令
echo 'char _$(var1)_b_[] = "@(#) $(var1)";' > $@
失败,但这一个
echo 'char _$(var1)_b_[] = "@(#)$(var1)";' > $@
好的。 看起来像bash认为$(var1)是一个新的命令,不能find需要的报价:
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
您可以尝试将echo命令卸载到单独的shell脚本中,例如
target: sh generate_code.sh $(var1) $(var2) $(var3) > $@
和generate_code.sh包含
#!/bin/sh echo "char _${1}_b_[] = \"@(#) $1 $2 $3\";"