那麼定義好變數,如何列印變數的值呢?舉例下變數引用的方式。
[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
[root@lincoding ~]# unset mystr
[root@lincoding ~]# echo $
[root@lincoding ~]#
shell入門 變數
shell變數分為系統變數和使用者自定義變數 檢視變數的命令 env 系統變數 或者 set 包括env和自定義變數和額外變數 使用變數的命令是 echo 變數 1.自定義變數 建議使用小寫,來區分系統變數。root wangshaojun 111 a 1 root wangshaojun 111 ...
Shell 七 陣列變數
普通陣列 只能使用整數作為陣列索引 關聯陣列 可以使用字串作為陣列索引 方法一 一次賦乙個值 陣列名 下標 變數值 array1 0 pear array1 1 array1 2 orange array1 3 peach echo 方法二 一次賦多個值 array2 tom jack alice ...
linux學習(七 Shell程式設計中的變數
目錄 root localhost vi mytestecho 你想要輸出的內容 執行指令碼的方法 sh 你建立的shell指令碼的名字bash 你建立的shell指令碼的名字開啟乙個子shell去讀取,不需要有執行許可權 或者source 你建立的shell指令碼的名字區別 在當前shell內執行...