bash编程系列-环境变量
来源:互联网 发布:淘宝买lol号卖家不给 编辑:程序博客网 时间:2024/06/09 23:20
在 bash 和几乎所有其它 shell 中,用户可以定义环境变量,这些环境变量在以 ASCII字符串存储。环境变量的最便利之处在于:它们是 UNIX 进程模型的标准部分。这意味着:环境变量不仅由 shell脚本独用,而且还可以由编译过的标准程序使用。当在 bash 中“导出”环境变量时,以后运行的任何程序,不管是不是 shell脚本,都可以读取设置。一个很好的例子是 vipw 命令,它通常允许 root 用户编辑系统口令文件。通过将 EDITOR环境变量设置成喜爱的文本编辑器名称,可以配置 vipw,使其使用该编辑器,而不使用 vi,如果习惯于 xemacs 而确实不喜欢vi,那么这是很便利的。
在 bash 中定义环境变量的标准方法是:
$ myvar='This is my environment variable!'
以上命令定义了一个名为 "myvar" 的环境变量,并包含字符串 "This is my environmentvariable!"。以上有几点注意事项:第一,在等号 "="的两边没有空格,任何空格将导致错误(试一下看看)。第二个件要注意的事是:虽然在定义一个字时可以省略引号,但是当定义的环境变量值多于一个字时(包含空格或制表键),引号是必须的。
第三,虽然通常可以用双引号来替代单引号,但在上例中,这样做会导致错误。为什么呢?因为使用单引号禁用了称为扩展的 bash特性,其中,特殊字符和字符系列由值替换。例如,"!" 字符是历史扩展字符,bash通常将其替换为前面输入的命令。(本系列文章中将不讲述历史扩展,因为它在 bash 编程中不常用。有关历史扩展的详细信息,请参阅 bash帮助页中的“历史扩展”一节。)尽管这个类似于宏的功能很便利,但我们现在只想在环境变量后面加上一个简单的感叹号,而不是宏。
现在,让我们看一下如何实际使用环境变量。这有一个例子:
$ echo $myvarThis is my environment variable!
通过在环境变量的前面加上一个 $,可以使 bash 用 myvar 的值替换它。这在 bash 术语中叫做“变量扩展”。但是,这样做将怎样:
$ echo foo$myvarbarfoo
我们希望回显 "fooThis is my environmentvariable!bar",但却不是这样。错在哪里?简单地说,bash变量扩展设施陷入了困惑。它无法识别要扩展哪一个变量:$m、$my、$myvar 、$myvarbar 等等。如何更明确清楚地告述 bash引用哪一个变量?试一下这个:
$ echo foo${myvar}barfooThis is my environment variable!bar
如您所见,当环境变量没有与周围文本明显分开时,可以用花括号将它括起。虽然 $myvar 可以更快输入,并且在大多数情况下正确工作,但${myvar}却能在几乎所有情况下正确通过语法分析。除此之外,二者相同,将在本系列的余下部分看到变量扩展的两种形式。请记住:当环境变量没有用空白(空格或制表键)与周围文本分开时,请使用更明确的花括号形式。
回想一下,我们还提到过可以“导出”变量。当导出环境变量时,它可以自动地由以后运行的任何脚本或可执行程序环境使用。shell脚本可以使用 shell 的内置环境变量支持“到达”环境变量,而 C 程序可以使用 getenv() 函数调用。这里有一些 C代码示例,输入并编译它们 -- 它将帮助我们从 C 的角度理解环境变量:
myvar.c -- 样本环境变量 C 程序
#include <stdio.h>#include <stdlib.h>int main(void) { char *myenvvar=getenv("EDITOR"); printf("The editor environment variable is set to %s\n",myenvvar);}
将上面的代码保存到文件 myenv.c 中,然后发出以下命令进行编译:
$ gcc myenv.c -o myenv
现在,目录中将有一个可执行程序,它在运行时将打印 EDITOR 环境变量的值(如果有值的话)。这是在我机器上运行时的情况:
$ ./myenvThe editor environment variable is set to (null)
啊... 因为没有将 EDITOR 环境变量设置成任何值,所以 C 程序得到一个空字符串。让我们试着将它设置成特定值:
$ EDITOR=xemacs$ ./myenvThe editor environment variable is set to (null)
虽然希望 myenv 打印值 "xemacs",但是因为还没有导出环境变量,所以它却没有很好地工作。这次让它正确工作:
$ export EDITOR$ ./myenvThe editor environment variable is set to xemacs
现在,如您亲眼所见:不导出环境变量,另一个进程(在本例中是示例 C 程序)就看不到环境变量。顺便提一句,如果愿意,可以在一行定义并导出环境变量,如下所示:
$ export EDITOR=xemacs
这与两行版本的效果相同。现在该演示如何使用 unset 来除去环境变量:
$ unset EDITOR$ ./myenvThe editor environment variable is set to (null)
- bash编程系列-环境变量
- Bash基本编程中的环境变量
- SHELL编程BASH环境变量-57
- Bash基本编程中的环境变量
- bash 脚本编程十二 环境变量的设置
- bash 脚本编程十三 环境变量的设置函数
- shell 变量 & 环境变量 (bash)
- Bash 的环境变量
- linux 环境变量和Bash
- bash学习之环境变量
- Bash的环境变量
- bash只读的环境变量
- bash csh 设置环境变量
- bash shell一些环境变量
- linux的bash环境变量
- Bash的环境变量
- bash编程
- bash编程
- Linux 2.6.36以后file_operations和DECLARE_MUTEX 的变化
- C#调用shutdown 来关机
- Delphi DBGRID中 根据不同的字段值显示不同的小图标
- httpclient介绍
- [观点]是重构,还是代码修整?
- bash编程系列-环境变量
- 3.2.2.4. The process list
- MoveWindow和setwindowpos的区别
- Java模式之动态代理
- (已测试)C# web下文件下载方法
- Linux基础知识及常用命令
- 面试总结1
- 对java 同步synchronized 的理解
- 手动清除jwgkvsq.vmx病毒