関数はまだ受信されていない入力値をエコーできます。

関数はまだ受信されていない入力値をエコーできます。

私は初めてバッシュに触れました。この言語では、関数がどのように機能するのか混乱しています。

私は次のコードを書いた。

#!/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

シェル変数の範囲の詳細については、次を参照してください。

変数の値を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"
}

これがなくても関数に値を渡す正しい方法です。頼るシェルスクリプトのグローバル変数。

答え2

パラメータを使用しないように関数を設計したためです。

関連情報