Bash
什麼是可變屬性?
我的目標是理解“變數屬性”的一般概念,希望它能幫助我理解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 正在導出的變數。