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

时间:2017-09-21 02:52:39

标签: bash shell environment-variables

我试图在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仍然将它们作为单独的参数接收。

我做错了什么?

1 个答案:

答案 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发生这种情况,并且没有引号应该将它变成实际参数。