Bash
函式可以回顯沒有作為輸入接收的值
我是 bash 的新手。我對函式在這種語言中的工作方式感到困惑。
我寫了這段程式碼:
#!/usr/bin/env sh choice_func() { echo "$choice" } echo "Enter your choice:" read choice choice_func
在調查我的程式碼時,我意識到我忘記
choice
在呼叫時將 的值作為輸入發送choice_func()
。但它工作正常!怎麼可能沒有給函式輸入,但是可以echo
嗎?
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 腳本中的全域變數的情況下將值傳遞給函式的正確方法。