我尝试在 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
是
读取 [-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"