函數可以回顯尚未接收的輸入值

函數可以回顯尚未接收的輸入值

我是bash新手。我對這種語言中函數的工作方式感到困惑。

我寫了這段程式碼:

#!/usr/bin/env sh

choice_func() {
        echo "$choice"
}

echo "Enter your choice:"
read choice
choice_func

在研究我的程式碼時,我意識到我忘記choice在呼叫時發送作為輸入的值choice_func()。但它工作正常!函數怎麼可能沒有得到輸入,但是可以嗎echo

答案1

您將值讀入choice腳本主要部分的變數中。該變數具有全域作用域(需要一個更好的詞),這意味著它在函數內部也是可見的。

請注意,如果您要讀取函數內部的值,則該變數仍然具有全域作用域並且在函數外部可見(在函數呼叫之後)。除非您將其聲明locallocal 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

因為您已經設計了一個不需要參數的函數,僅此而已。

相關內容