引用的价值内联作用,但在shell脚本内部的环境变量中不起作用



我正在尝试在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作为单个参数传递。所有引号都在那里说服外壳实现这一目标,并且任何报价都不应将其纳入实际参数。

最新更新