Bashスクリプトの同じ行で読み取り変数を評価します。

Bashスクリプトの同じ行で読み取り変数を評価します。

Bashスクリプトはこのコマンドで返された値を取得しようとしましたが、何も返さないようです。

rr=$(read -p Enter -r)

echo "Is $rr"
read -p "java archive detected, Enter Y to download it again, N to continue $nl" -r
if [[ $REPLY =~ ^[Yy]$ ]] && [[ $(read -p Enter -r) == "Y" ]]; then

        echo "Y entered $REPLY"
        break;

    elif [[  $REPLY =~ ^[Nn]$  ]]; then

        echo "java Archive was extracted successfully to $java8Dir $nl"

    fi

答え1

これはread、コマンド置換($())内で実行されているためです。そうする必要はありません。ちょうど使用:

read -p Enter -r rr
echo "Is $rr"

このvar=$(command)構文は、の値をvarの戻り値に設定しますcommand。組み込み関数はread何も返さないので(終了状態は除外しますが、ここでは関係ありません)、変数は空です。構文は値を設定するreadことです。read VAR$VAR

答え2

正しい構文は次readのとおりです。

read [-ers] [-a name] [-d delim] [-i テキスト] [-n nchars] [-N nchars] [-p プロンプト] [-t タイムアウト] [-u fd] [name .. ]

(からman bash

  • 最初の行は次のようになりますread -p Enter -r rr(本当にバックスラッシュをキャンセルする必要がありますか?)。
  • 内部テストは以下をお読みください。

    if ... && [[ "$(read -p Enter R ; echo $R )" == "Y"  ]] ; tehn
    

答え3

このコマンドは、read -p Enter -rユーザーが入力した値を$ REPLY(Bash)変数に入れます。したがって、次のように動作します。

$ read -p Enter: -r
Enter:hello
$ echo "$REPLY"
hello

したがって、var rrにユーザー入力を希望する場合は、次のようにします。

$ read -p "Enter: " -r rr
Enter: hello
$ echo "$rr"
hello

または1行で:

$ read -p "Enter: " -r rr; echo "$rr"
Enter: hello
hello

変数を読み込み、印刷するために(スクリプトで)実行する必要があるタスクは次のとおりです。

read -p "Enter : " -r rr
echo "Is $rr"

関連情報