Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351856
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2008-05-16 09:04:24



嚴格來說,我們在當前 shell 中所定義的變量,均屬於"本地變量"(local variable),
只有經過 export 命令的"輸出"處理,才能成為環境變量(environment variable):

CODE:
        $ A=B
        $ export A

或:

CODE:
        $ export A=B

經過 export 輸出處理之後,變量 A 就能成為一個環境變量供其後的命令使用。
在使用 export  的時侯,請別忘記 shell 在命令行對變量的"替換"(substitution)處理,
比方說:

CODE:
        $ A=B
        $ B=C
        $ export $A

上面的命令並未將 A 輸出為環境變量,而是將 B 作輸出,
這是因為在這個命令行中,$A 會首先被提換出 B 然後再"塞回"作 export 的參數。

要理解這個 export ,事實上需要從 process 的角度來理解才能透徹。
我將於下一章為大家說明 process 的觀念,敬請留意。

*取消變量*

要取消一個變量,在 bash 中可使用 unset 命令來處理:

CODE:
        unset A

與 export 一樣,unset 命令行也同樣會作變量替換(這其實就是 shell 的功能之一),
因此:

CODE:
        $ A=B
        $ B=C
        $ unset $A

事實上所取消的變量是 B 而不是 A 。

此外,變量一旦經過 unset 取消之後,其結果是將整個變量拿掉,而不僅是取消其變量值。
如下兩行其實是很不一樣的:

CODE:
        $ A=
        $ unset A

第一行只是將變量 A 設定為"空值"(null  value),但第二行則讓變量 A 不在存在。
雖然用眼睛來看,這兩種變量狀態在如下命令結果中都是一樣的:

CODE:
        $ A=
        $ echo $A

        $ unset A
        $ echo $A
       

請學員務必能識別 null value 與 unset 的本質區別,這在一些進階的變量處理上是很嚴格的。
比方說:

CODE:
        $ str=                # 設為 null
        $ var=${str=expr}        # 定義 var
        $ echo $var
       
        $ echo $str
       
        $ unset str        # 取消
        $ var=${str=expr}        # 定義 var
        $ echo $var
        expr
        $ echo $str
        expr
阅读(800) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~