我是bash新手。我對這種語言中函數的工作方式感到困惑。
我寫了這段程式碼:
#!/usr/bin/env sh
choice_func() {
echo "$choice"
}
echo "Enter your choice:"
read choice
choice_func
在研究我的程式碼時,我意識到我忘記choice
在呼叫時發送作為輸入的值choice_func()
。但它工作正常!函數怎麼可能沒有得到輸入,但是可以嗎echo
?
答案1
您將值讀入choice
腳本主要部分的變數中。該變數具有全域作用域(需要一個更好的詞),這意味著它在函數內部也是可見的。
請注意,如果您要讀取函數內部的值,則該變數仍然具有全域作用域並且在函數外部可見(在函數呼叫之後)。除非您將其聲明local
為local choice
函數內部的那樣,否則就會出現這種情況。
有關 shell 變數作用域的更多信息,請參閱例如
若要將變數中的值傳遞choice
給函數,請使用
choice_func "$choice"
然後,該函數可以在$1
其第一個位置參數 中存取該值:
choice_func () {
echo "$1"
}
或者
choice_func () {
local choice="$1"
# choice is now local and separate from the variable
# with the same name in the main script.
echo "$choice"
}
這是將值傳遞給函數的正確方法,無需依靠shell 腳本中的全域變數。
答案2
因為您已經設計了一個不需要參數的函數,僅此而已。