Bash

Bash 局部變數初始化

  • August 29, 2017

Bash如何初始化局部變數?以下命令是否總是做同樣的事情(在函式內部使用時)?

local foo
local foo=
local foo=""

local foo=""並且local foo=完全等價。在這兩種情況下,等號的右側都是空字元串。

local foo並且local foo=不同:local foo設置為空字元串foo時未local foo=設置。foo更準確地說,local foo創建一個局部變數,並且該變數最初是未設置的。隨後foo=…的賦值設置本地值,並且該賦值可以與local語句組合。見證:

bash-4.3$ demo () {
 local unset empty=
 echo "unset=\"${unset-(not set)}\" empty=\"${empty-(not set)}\""
}
bash-4.3$ demo
unset="(not set)" empty=""

這與 ksh 的行為相同(除了在 ksh 中您需要使用關鍵字typeset而不是local)。另一方面,在 zsh 中,local foo設置foo為空字元串。

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