前言
眾所周知shell 中的變數只作用於當前程序。如需在子程序中建立副本可使用 export 內建命令。 有時使用臨時變數語法可以非常方便。
變數使用
例如:url=
echo $url
export 到子程序
通常變數是不需要 export 的,但是當你需要把乙個工作分割成若個小的任務, 分別用乙個指令碼來實現的時候,就需要把變數名傳遞給它們。 比如有乙個 spider.sh 來獲**任意 url 到臨時目錄:
#!/usr/bin/env bash
curl $url > $tmpdir/$random.html
我們程式設計客棧需要將當前指令碼中的 url 傳遞給spider.sh:
export url=
bash ./spider.sh
# 等價於(如果該檔案有可執行許可權的話)
./spider.sh
值得注意的是export只會在子程序中建立變數的副本,即spider.sh對它的改動不會體現在當前程序。
在當前程序執行指令碼
使用 source 或 . 內建命令可以在當前程序執行另乙個指令碼,因此當前上下文的變數對該指令碼是可見的。
url=
source ./spider.sh
# 等價於
. ./spider.sh
臨時設定環境變數
根據 shell 語法,在乙個簡單命令前可以包含任意個賦值語句。這些變數賦值將會在執行命令前展開,等效於臨時的環境變數。
a 「****** command」 is a sequence of optional variable assignments and redirections, in any sequence, optionally followed by words and redirections, terminated by a control operator. – ****** commands, shell commands
例如下面命令可以把urlluesqua變數傳遞給spider.sh:
url= bash ./spider.sh
這是一條 簡單命令,下面的多條命令或 組合命令:
url=; bash ./spider.sh www.cppcns.com# 兩條命令,只作用於當前程序
url= && bash ./spider.sh # 組合命令,只作用於當前程序
export url=; bash ./spider.sh # 兩條命令,作用於父子程序
簡單命令中的變數賦值也不作用於當前程序。例如下面的**將會輸出空行:
url= echo $u程式設計客棧rl
總結本文標題: shell中變數作用域的介紹與使用命令
本文位址: /os/linux/199702.html
shell變數作用域
在shell中定義函式可以使 模組化,便於復用 不過指令碼本身的變數和函式 的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。1 shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或 被顯示刪除的地方為止。例1 指令碼變數的作用域 bin bash de...
Shell變數作用域
變數作用域就是變數的有效範圍,shell中變數作用域有三種 1.全域性變數 在當前shell中任何地方使用的變數。2.區域性變數 只能在函式內使用的變數。3.環境變數 可以在任何shell中使用的變數。在當前shell中任何地方都能使用,不同shell中的全域性變數互不影響,在shell中定義的變數...
Shell中指令碼變數的作用域
在shell中定義函式可以使 模組化,便於復用 不過指令碼本身的變數和函式 的變數的作用域問題可能令你費解,在這裡梳理一下這個問題。1 shell指令碼中定義的變數是global的,其作用域從被定義的地方開始,到shell結束或 被顯示刪除的地方為止。例1 指令碼變數的作用域 bin bash de...