我正在尝试在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
接收到它们作为单独的参数。
我在做什么错?
您所追求的代码为:
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
作为单个参数传递。所有引号都在那里说服外壳实现这一目标,并且任何报价都不应将其纳入实际参数。