私は 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
シェル変数のスコープの詳細については、例えば以下を参照してください。
変数の値を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
引数を必要としない関数を設計したので、それだけです。