Bash

什麼是可變屬性?

  • June 2, 2019

我的目標是理解“變數屬性”的一般概念,希望它能幫助我理解Bash 中聲明的內容

什麼是可變屬性?為什麼有人要為變數賦予屬性?為什麼在使用變數時創建變數並在執行中擴展它們就“足夠”了?

通常,變數是儲存值的地方。您為變數 ( ) 分配一個值var="some value",然後您可以通過變數擴展來呼叫該值(寫作"$var"等同於寫作"some value")。

當你給它們賦值時,或者在 shell 訪問變數的其他情況下,可以使變數做一些特殊的事情。變數上的屬性是 shell 儲存在變數名稱和值旁邊的註釋,它告訴 shell 應用這種特殊行為。

一個例子

declare -i x告訴 shellx必須只包含整數值。通常,當您為變數賦值時,shell 會獲取擴展等號右側產生的字元串並將其儲存為變數的值。但如果變數具有整數屬性,shell 會將該字元串解析為算術表達式並儲存該表達式的計算結果。例如:

$ x=2+2; echo $x
2+2
$ declare -i x; x=2+2; echo $x
4
$ declare -i x; x=2+hello; echo $x
2
$ declare -i x; x=2+
bash: 2+: syntax error: operand expected (error token is "+")

(第三行x=2+hello設置x為 2 因為hello是一個未定義的變數名,未設置的變數預設被預設解釋為 0。)

更多範例

  • declare -l var聲明var必須只包含小寫字母。當 shell 儲存變數的值時,它將任何大寫字母轉換為小寫。
  • declare -u var在另一個方向進行轉換。
  • declare -r var設為var只讀,這也是賦值的一種特殊行為:它會導致每個後續賦值var失敗。
  • declare -x var導致var被導出到環境中。對於此屬性,當 bash 執行外部命令時會發生特殊行為:外部命令會看到一個環境,​​該環境包含在 shell 執行外部命令時 shell 正在導出的變數。

引用自:https://unix.stackexchange.com/questions/522366