Shell(Bash)使用者自定義變數使用方法詳解

2020-07-16 10:04:35
使用者自定義變數是最常用的變數型別,其特點是變數名和變數值都是由使用者自由定義的。

那麼,該如何定義變數呢?很簡單,只需執行"變數名=變數值"命令即可,不過要遵守變數定義規則。例如:

[[email protected] ~]# name="C biancheng"

變數的定義就是這麼簡單,但是如果不遵守變數定義規則,就會報錯。比如:

[[email protected] ~]# 2name="C biancheng"
-bash: 2name=shen chao: command not found
#變數名不能以數位開頭
[[email protected] ~]# name = "C biancheng"
-bash: name: command not found
#左右兩側不能有空格
[[email protected] ~]# name=C baincheng
-bash: chao: command not found
#變數的值如果有空格,必須用引號包含


我們再來看如何進行變數疊加。例如:

[[email protected] ~]# aa=123
#定義變數aa的值是123
[[email protected] ~]# aa="$aa"456
#重複定義變數aa的值是源aa的值加上456
[[email protected] ~]# echo $aa
123456
#aa的值已經變成了123456
[[email protected] ~]# aa=${aa}789
[[email protected] ~]# echo $aa
123456789
#在進行變數疊加時也可以使用${變數名}格式

這裡要小心,在進行變數疊加時,變數名需要用雙引號或 ${} 包含。

在定義變數時,也可以使用特殊字元,如雙引號、單引號、反引號、小括號、大括號等。

變數呼叫

當我們需要提取變數中的內容時,需要在變數名之前加入"$"符號。也就是說,我們需要呼叫變數時,需要在變數名之前加入"$"符號。那麼最簡單的變數呼叫就是通過 echo 命令輸出變數的值。命令如下:

[[email protected] ~]# name="C biancheng"
#定義變數name
[[email protected] ~]# echo $name
C biancheng
#輸出變數name的值

就這麼簡單。不過,不僅通過 echo 命令輸出變數的值時才需要在變數名前加入符號,只要需要呼叫變數的值,就需要在變數名前加入"$"符號。

變數檢視

我們可以通過 echo 命令查詢已經設定的變數的值,這種查詢是已知變數名查詢變數值。但是如果我不知道變數名,那麼可以查詢系統中已經存在的變數嗎?

當然可以,只需使用 set 命令即可。set 命令可以用來檢視系統中的所有變數(使用者自定義變數和環境變數)和設定 Shell 的執行環境。命令格式如下:

[[email protected] ~]# set [選項]

選項:
  • -u:如果設定此選項,則在呼叫未宣告的變數時會報錯(預設無任何提示);
  • -x:如果設定此選項,則在命令執行之前會先把命令輸出一次;

舉幾個例子:

[[email protected] ~]# set
BASH=/bin/bash
...省略部分輸出...
name='C biancheng'
#直接使用set命令,會查詢系統中所有的變數,包含使用者自定義變數和環境變數
[[email protected] ~]# set -u
[[email protected] ~]# echo $file
-bash: file: unbound variable
#當設定了-u選項後,如果呼叫沒有設定的變數則會報錯。預設是沒有任何輸出的
[[email protected] ~]# set -x
[[email protected] ~]# ls
+ ls --color=auto
anaconda-ks.cfg install.log install.log.syslog sh tdir test testfile
#如果設定了-x選項,則會在每條命令執行之前先把命令輸出一次

set 命令的選項和功能眾多,不過我們更常用的還是使用 set 命令檢視變數。

變數刪除

要想刪除自定義變數,可以使用 unset 命令。命令格式如下:

[[email protected] ~]# unset 變數名

這裡只是清空變數,而不是呼叫變數的值,所以在變數名前不需要加入符號。舉個例子:

[[email protected] ~]# unset name
#刪除name變數

這條命令執行之後,再查詢變數,就會發現這個變數已經為空了。