『忘了再學』Shell基礎 — 11、變數定義的規則和分類

繁華似錦Fighting發表於2022-04-13

1、定義變數的規則

在定義變數時,有一些規則需要遵守

  • 變數名稱可以由字母、數字和下劃線組成,但是不能以數字開頭。如果變數名是2name則是錯誤的。
  • 在Bash中,變數的預設型別都是字串型,如果要進行數值運算,則必修指定變數型別為數值型。
  • 變數用等號連線值,等號左右兩側不能有空格。
    [root@localhost ~]# name = cangls
    -bash: name: command not found
    
  • 變數的值如果有空格,需要使用單引號或雙引號包括。如:test="hello world!"。其中雙引號括起來的內容$\和反引號都擁有特殊含義,而單引號括起來的內容都是普通字元。
  • 在變數的值中,可以使用“\”轉義符。
  • 如果需要增加變數的值,那麼可以進行變數值的疊加。不過變數需要用雙引號包含"$變數名"或用${變數名}包含變數名(就相當於Java中字串連線)。例如:
    #疊加變數 test,變數值變成了123456
    [root@localhost ~ ] # test=123
    [root@localhost ~ ] # test="$test"456
    [root@localhost ~ ] # echo $test
    123456
    
    #再疊加變數 test,變數值變成了123456789
    [root@localhost ~ ] # test=${test}789
    [root@localhost ~ ] # echo $test
    123456789
    

    總結:變數值的疊加可以使用兩種格式:"$變數名"${變數名}

  • 如果是把命令的結果作為變數值賦予變數,則需要使用反引號或$( )包含命令。之前說過,例如:
    [root@localhost ~ ] # test=$(date)
    [root@localhost ~ ] # echo $test
    2018年 10月 21日 星期一 20:27:50 CST
    
  • 環境變數名建議大寫,便於和命令區分。

2、變數的分類

Shell中變數的分類並不是安裝變數的型別進行分類的。

  • 使用者自定義變數:這種變數是最常見的變數,由使用者自由定義變數名和變數的值。(只在當前Shell中生效,子Shell中不生效)
  • 環境變數:這種變數中主要儲存的是和系統操作環境相關的資料,比如當前登入使用者,使用者的家目錄,命令的提示符等。環境變數的變數名可以自由定義,但是一般對系統起作用的環境變數的變數名是系統預先設定好的。

    說明:環境變數分為兩種,一種是允許使用者自定義的,還有一種是系統定義好的。使用者定義的這種環境變數,對整個作業系統的環境來說作用不是很大,唯一的作用就是,在父子Shell中都生效(這個以後再說)。而系統定義的環境變數,會對我們的操作環境產生一定影響。對系統定義的環境變數,我們不能修改變數的名稱和作用,只能修改變數的屬性值。系統定義的環境變數主要就是在幾個重要的環境變數配置檔案中的變數,如/etc/profile檔案中的變數。
    ...
    提示:環境變數的作用域是整個系統都生效,包括父Shell子Shell。在這種情況下,為了避免和系統命令產生衝突,建議環境變數的名稱都是大寫(主要是自定義的環境變數,系統定義的環境變數一般都是大寫的,也不能改),因為Linux系統中所有的系統命令都是小寫(只有大寫的命令選項),這樣就可以避免混淆了。

  • 預定義變數:是Bash中已經定義好的變數,變數名不能自定義,變數作用也是固定的。
  • 位置引數變數:這種變數主要是用來向指令碼當中傳遞引數或資料的,變數名不能自定義,變數作用是固定的。(位置引數變數其實就是預定義變數中的一個型別)

說明:預定義變數和位置引數變數一共就幾種,需要記住(以後詳細講)。

相關文章