youbest的LFS大作 <<手把手教你如何建立自己的Linux系统>> 里的一个疑问
时间:2008-11-02
来源:互联网
CC="gcc -B/usr/bin/" ../binutils-2.17/configure --prefix=/tools --disable-nls --disable-werror
目的是生成Binutils的Makefile文件,以供下阶段的make程序编译使用。
但使我不明白的是在命令行上多了一个 CC="gcc -B/usr/bin/" 我猜应该是在运行configure脚本时向其初始化一个CC变量,以供其使用。
于是我想试试这个Bash特性,于是我在命令行上敲了一个
$ CC="gcc -O2" echo $CC
但命令行上却打印了一个空行,为什么echo程序不像configure脚本一样能接受到同一个命令行上的变量定义呢?
作者: osborn_lix 发布时间: 2008-11-02
对于你这条 CC="gcc -O2" echo $CC 来说,CC 的确是作为一个环境变量传给 echo 了,但是 echo 并没有用到这个变量!!
用到这个变量的是 shell,shell 在解释这一行的时候就把 $CC 扩展开作为参数传给 echo,但此时 CC 变量并没有定义,因为你给的 CC 定义在同一行,shell 还来不及从它已知的变量列表中找到它。
但换一种方式你就可以看到 CC 了:
$ CC="gcc -O2" $ echo $CC gcc -O2
#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
作者: Vamperor 发布时间: 2008-11-02
作者: osborn_lix 发布时间: 2008-11-02
作者: osborn_lix 发布时间: 2008-11-02
作者: Vamperor 发布时间: 2008-11-03
一般系统上至少有两个版本的echo,
coreutils软件包中有一个,一般安装到/bin/echo,
shell一般内建有一个echo,如bash内建有echo,
不指明绝对路径时,shell优先使用内建版本。
shell内建echo不等同于/bin/echo,
2楼的例子程序不适用这种情况,不过结果是一样的。
作者: 聚焦深空 发布时间: 2008-11-03
作者: 聚焦深空
shell内建echo不等同于/bin/echo, 2楼的例子程序不适用这种情况,不过结果是一样的。 |
作者: Vamperor 发布时间: 2008-11-03
不过我还有个疑问,如果按照二楼解释,那我觉得
CC="gcc -O2" echo $CC
echo $CC
这样应该可以输出gcc -O2才对啊,因为第二次echo与CC="gcc -O2"不在一行阿,可是为什么这样输出也是空呢?
作者: skycleaner 发布时间: 2008-11-04
作者: skycleaner
努力学习一下
不过我还有个疑问,如果按照二楼解释,那我觉得 CC="gcc -O2" echo $CC echo $CC 这样应该可以输出gcc -O2才对啊,因为第二次echo与CC="gcc -O2"不在一行阿,可是为什么这样输出也是空呢? |
环境变量仅对当前命令有效。
XX="xxx" cmd != XX="xxx"
作者: 聚焦深空 发布时间: 2008-11-06
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28