ここで文字列と比較するには$ 1と$ 2が必要です。

ここで文字列と比較するには$ 1と$ 2が必要です。

フォローアップです。この問題;
理由はわかりませんが、次のコードを理解しようとしたにもかかわらず、誤解が発生し続けます。

function read_and_verify  {
    read -p "$1:" tmp1
    read -p "$2:" tmp2
    if [ "$tmp1" != "$tmp2" ]; then
        echo "Values unmatched. Please try again."; return 2
    else
        read "$1" <<< "$tmp1"
    fi
}

read_and_verify domain "Please enter the domain of your web application twice" 
read_and_verify dbrootp "Please enter the app DB root password twice" 
read_and_verify dbuserp "Please enter the app DB user password twice"

$1なぜ必要なのか$2、なぜ必要なのか誤解しましたread "$1" <<< "$tmp1"

この比較シナリオでは、実際に何が起こりますか?

ベストアンサー1

read -p "$1:" tmp1そして、関数の最初の()と2番目の()パラメータをread -p "$2:" tmp2それぞれユーザー入力行を読み取るためのプロンプトとして使用します。結果はおよびに保存されます。次に、2つの値が等しい場合、fromの値を関数の最初の引数と呼ばれる変数として読み込みます。$1$2tmp1tmp2tmp1read "$1" <<< "$tmp1"

read_and_verify domain "Please enter the domain of your web application twice"したがって、ユーザー入力がイタリック体で表示され、次のような結果が得られます。

フィールド:金持ち
Webアプリケーションのドメイン名を2回入力します。金持ち

次に、入力された値を上記のように実行された変数に保存しますdomainecho "$domain"foo

なぜ$1と$2が必要なのか、なぜ"$1" <<< "$tmp1"を読むのか誤解しました。

$1$2ユーザーにプロンプ​​トとして機能$1します。返品結果変数の名前を関数に渡すために使用されます。これにより、最初のヒントが少し奇妙になりました。次のように、より説明的な内容を使用する方が良いかもしれません。

read -p "Please enter value for '$1': " tmp1
read -p "Please repeat the value to verify: " tmp2

または、$2両方のプロンプトに渡されたメッセージを使用してください。他の質問に答えるにはする。

read "$1" <<< "$tmp1"通常、ある変数の値を別の変数に割り当てることができるため、これは少し奇妙です。しかし、ここで問題は$1次のとおりです。名前変数の値なので、間接割り当てが必要です。 Bash 4.3以降では、名前参照を使用できます。

declare -n ref="$1"
ref=$tmp1

したがって、関数全体を次のように書くことをお勧めします。

#!/bin/bash
function read_and_verify  {
    read -p "Please enter value for '$1': " tmp1
    read -p "Please repeat the value to verify: " tmp2
    if [ "$tmp1" != "$tmp2" ]; then
        echo "Values unmatched. Please try again."; return 2
    else
        declare -n ref="$1"
        ref=$tmp1
    fi
}

(2番目のパラメータは使用しません。)

おすすめ記事