评估 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不会返回任何内容(除了退出状态之外,但这与此处无关),因此您的变量仍为空。的语法readread VAR,它将设置 的值$VAR

答案2

正确的语法read

读取 [-ers] [-a aname] [-d delim] [-i text] [-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

或者,作为一行:

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

您需要做的(在脚本中)读取变量然后打印它是:

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

相关内容