私は初めてバッシュに触れました。この言語では、関数がどのように機能するのか混乱しています。
私は次のコードを書いた。
#!/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
パラメータを使用しないように関数を設計したためです。