小鳥初學Shell程式設計(七)變數引用及作用範圍

2022-01-10 01:09:35 字數 2150 閱讀 6090

那麼定義好變數,如何列印變數的值呢?舉例下變數引用的方式。

[root@lincoding ~]# string="hello shell"

[root@lincoding ~]# echo $

hello shell

[root@lincoding ~]# echo $string

hello shell

那麼有花括號括起來的變數和沒有花括號的區別是什麼呢?

[root@lincoding ~]# echo $string9

[root@lincoding ~]# echo $9

hello shell9

可以發現在引用string變數後加了個9,沒有加花括號的引用,會把string9當做乙個變數名,有加花括號的引用,則在列印string變數後,尾部多增加乙個9我們通過定義的變數只會在當前的shell環境生效,當切換成另外乙個shell的時候,之前定義好的變數是不生效的

我們在shell指令碼裡定義了乙個變數str

#!/bin/bash

str="my shell"

echo $

執行shell指令碼的時候,會列印在shell指令碼定義的變數的值。當前終端引用了shell指令碼的變數,列印了空值。

[root@lincoding ~]# ./test.sh

my shell

[root@lincoding ~]# echo $

[root@lincoding ~]#

說明變數str作用範圍只在shell指令碼裡。

如果在終端定義個一變數,shell指令碼裡引用該變數會生效嗎?

[root@lincoding ~]# mystr="abc"

[root@lincoding ~]# cat test.sh

#!/bin/bash

echo $

[root@lincoding ~]# ./test.sh

[root@lincoding ~]# bash test.sh

[root@lincoding ~]# . test.sh

abc[root@lincoding ~]# source test.sh

abc

上面分別使用了四種執行方式執行指令碼,這四種執行方式的影響也在前面章節詳細說明過。

方式一和方式二,是會產生子程序來執行指令碼,由於當前終端定義的變數作用範圍只在當前的終端,所以子程序引用于父程序定義的變數是不生效的。

方式三和方式四,是不會產生子程序,而是直接在當前終端環境執行指令碼,所以也在變數的作用範圍內,所以引用了變數是生效的。

假設想讓父程序定義的變數在子程序或子shell也同時生效的話,那麼需要用export將變數匯出,使用的具體方式如下例子:

[root@lincoding ~]# mystr="abc"

[root@lincoding ~]# bash test.sh

[root@lincoding ~]# export mystr

[root@lincoding ~]# bash test.sh

abc[root@lincoding ~]# ./test.sh

abc

可見在使用export後,終端定義的變數,test.sh指令碼裡引用了該變數是生效的。也就說子程序可以獲取父程序定義的變數的值。

如果用完了該變數,想把變數清空,則可以使用unset

小鳥初學Shell程式設計(六)變數賦值

我們在使用linux命令或指令碼的時候,會有一些輸出,那麼這些輸出的資訊可以用變數臨時儲存,以備我們下一條命令或指令碼使用。變數的定義建議用乙個有意義的英文單詞來代表變數,不要使用簡單的字母a,b這類的變數名定義。因為我們寫好shell指令碼實際上是要給人看的,所以我們定義好的變數,是希望變數有具體...

小鳥初學Shell程式設計(九)環境變數變數配置檔案

環境變數主要儲存在以下四個檔案和乙個目錄中 儲存在 etc 目錄下的配置檔案,都是所有使用者通用的配置,就是不管是root使用者還是普通使用者。儲存在 使用者家目錄的配置檔案,是儲存特定使用者的配置,例如在某些環境只有root使用者才可使用。在重新開啟新的終端或切換不同使用者時,配置檔案的載入順序是...

小鳥初學Shell程式設計(五)輸入輸出重定向

乙個程序缺省會開啟標準輸入 標準輸出 錯誤輸出三個檔案描述符。重定向可以讓我們的程式的標準輸出 錯誤輸出的資訊重定向檔案裡,那麼這裡還可以將檔案的內容代替鍵盤作為一種標準輸入的方式。01 輸入重定向符號 的作用 會把檔案的內容當做引數輸入到程序,如下例子 root omp120 home cat f...