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"