|
发表于 2008-11-2 16:09:28
|
显示全部楼层
注意 shell 参数的扩展顺序
对于你这条 CC="gcc -O2" echo $CC 来说,CC 的确是作为一个环境变量传给 echo 了,但是 echo 并没有用到这个变量!!
用到这个变量的是 shell,shell 在解释这一行的时候就把 $CC 扩展开作为参数传给 echo,但此时 CC 变量并没有定义,因为你给的 CC 定义在同一行,shell 还来不及从它已知的变量列表中找到它。
但换一种方式你就可以看到 CC 了:- $ CC="gcc -O2"
- $ echo $CC
- gcc -O2
复制代码
为了验证我说的第一点,你可以自己编写一个小程序 arg.c- #include <stdio.h>
- #include <stdlib.h>
- int main(int argc, char *argv[])
- {
- char *s = getenv("CC");
- if (s == NULL)
- fprintf(stderr, "No environment variable named CC!\n");
- else
- printf("%s\n", s);
- exit(EXIT_SUCCESS);
- }
复制代码
编译运行:- $ gcc -g -Wall arg.c -o arg
- $ unset CC
- $ ./arg
- No environment variable named CC!
- $ CC="gcc -O2" ./arg
- gcc -O2
复制代码 |
|