Bash
是否可以在函式中添加函式?
這是我的程式碼:
function update_profile { echo "1. Update Name" echo "2. Update Age" echo "3. Update Gender" echo "Enter option: " read option case $option in 1) update_name ;; 2) update_age ;; 3) update_gender ;; esac function update_name { echo "Enter new name: " read name } }
只是想確定是否可以這樣做。我知道我可以把所有的程式碼都扔進箱子裡,但它會很亂,所以我想在一個函式內創建一個獨立的函式,並在需要時呼叫它來執行它的命令。
是的,這是可能的。
甚至可以將一個函式嵌套在另一個函式中,儘管這不是很有用。
f1 () { f2 () # nested { echo "Function \"f2\", inside \"f1\"." } } f2 # Gives an error message. # Even a preceding "declare -f f2" wouldn't help. echo f1 # Does nothing, since calling "f1" does not automatically call "f2". f2 # Now, it's all right to call "f2", #+ since its definition has been made visible by calling "f1". # Thanks, S.C.
資料來源:Linux 文件項目
您可以在 shell 需要命令的任何地方定義函式,包括在函式中。請注意,該函式是在 shell 執行其定義時定義的,而不是在 shell 解析文件時定義的。因此,如果使用者在第一次執行時選擇選項 1,您的程式碼將不起作用
update_profile
,因為update_name
在語句中呼叫時case
,函式的定義update_name
尚未執行。一旦函式update_profile
被執行一次,函式update_name
也將被定義。您需要
update_name
在使用它的點之前移動定義。定義
update_name
內部update_profile
並不是特別有用。這確實意味著update_name
在第一次執行之前不會定義update_profile
它,但之後它將保持可用。如果您只想update_name
在內部可用update_profile
,請在其中定義函式並unset -f update_name
在從函式返回之前呼叫。但是,與做簡單的事情並在全域範圍內定義所有函式相比,這樣做並不會真正獲得任何好處。