Bash

函式可以回顯沒有作為輸入接收的值

  • April 9, 2020

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

我寫了這段程式碼:

#!/usr/bin/env sh

choice_func() {
       echo "$choice"
}

echo "Enter your choice:"
read choice
choice_func

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

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 腳本中的全域變數的情況下將值傳遞給函式的正確方法。

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