我试图在bash脚本中运行它。
./configure --with-cc-opt='-O0 -g -Wno-error'
但'-O0 -g -Wno-error'
部分作为变量传入。注意上面的工作没有变量就好了。
如果我使用这个
CC_OPTS="'-O0 -g -Wno-error'"
./configure --with-cc-opt=${CC_OPTS}
就像单引号中的值被拆分一样,./configure
最终得到--with-cc-opt=-O0
,-g
和-Wno-error
作为单独的参数。
CC_OPTS="'-O0 -g -Wno-error'"
echo ${CC_OPTS}
使用正确的单引号打印出'-O0 -g -Wno-error'
。
CC_OPTS="'-O0 -g -Wno-error'"
echo --with-cc-opt=${CC_OPTS}
打印出--with-cc-opt='-O0 -g -Wno-error'
这也是正确的。但是./configure
仍然将它们作为单独的参数接收。
我做错了什么?
答案 0 :(得分:3)
您之后的代码是:
CC_OPTS="-O0 -g -Wno-error"
./configure --with-cc-opt="${CC_OPTS}"
您不能只在字符串中放入单引号并期望对它们进行解释。这就像把+
放在一个Java字符串中,并期望这个工作:
String s = "1+1";
System.out.println(1+1); // print 2
System.out.println(s); // prints 1+1 instead of 2
您希望将--with-cc-opt=-O0 -g -Wno-error
作为单个参数传递。所有引用都只是说服shell发生这种情况,并且没有引号应该将它变成实际参数。