Bash関数は渡された引数に値を割り当てます。

Bash関数は渡された引数に値を割り当てます。

私は次のような状況にあります。

構成ファイルからそのパラメーターを読み取り(存在し、パラメーターが存在する場合)、ユーザーにそのパラメーターを入力するように要求する(存在しない場合)スクリプトを作成しています。

いくつかのパラメータに対してこれをやっているので、関数を書くのが良い方法だと思いました。

しかし、私が理解しているように、関数はecho結果の値をグローバル変数に割り当てるか割り当てて返します。関数から画面をエコーし​​たいので、オプション2でなければなりません。だから私はこれを試しました:

# parameters: $1=name of parameter, $2=user prompt, $3=value read from config.cfg
function getParameter {
    # If the value couldn't be read from the config file
    if [ -z "$3" ]; then
        # Echo the prompt
        echo "$2"
        # Read the user input
        read parameter

        # If it's empty, fail
        if [ -z "$parameter" ]; then
            echo "Parameter $1 not found"
            exit
        # Else, try to assign it to $3   <---- This is where it fails
        else
            $3="$parameter"
        fi
    fi
}

私はそれをそう呼ぶ:

getParameter "Database username" "Please enter database username" $database_username

ファイルconfig.cfgsource関数を呼び出す前に生成され、オプションの$database_usernameパラメータの1つです。

今これは明らかに動作しません。私は割り当てることができず、$3メソッドが一般的であることを望むので、MY_VARIABLE=$parameterそうすることもできません。

以下をすべて達成する方法について提案がある人はいますか?

  1. 変数の値を取得するか、config.cfgユーザー入力から読み込みます。
  2. 一般的な方法でこれを行います。つまり、各パラメータに対して上記のコードを繰り返さないでください(関数なし)。

ベストアンサー1

100%確信できませんが、ファイルがconfig次のようになるとします。

foo
database_user tom
bar

私たちが望む確かな値はの値ですdatabase_user

スクリプトに次の行を追加するだけです。

dbUser=$(sed -nE 's/database_user (.*$)/\1/p' config)

これにより、変数には$dbUser次の情報が含まれます。

echo $dbUser 
tom

おすすめ記事