在Bash中,如何将用户输入读入一个变量?
fullname=""
# Now, read user input into the variable `fullname`.
read -p
:
# fullname="USER INPUT"
read -p "Enter fullname: " fullname
# user="USER INPUT"
read -p "Enter user: " user
read -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
你还应该引用变量,以防止路径名扩展和空格分隔:
# passwd "$user"
# mkdir "$home"
# chown "$user:$group" "$home"
${confirm^^} == 'YES'
。 该语句的意思是检查${confirm}
变量中的文本是否全为大写字母的"YES",如果是则返回true,否则返回false。 - Aleks-Daniel Jakimenko-A.if [[ "$confirm" == [yY] ]]; do
... - Gabriel Staplesthen
而不是 do
: if [[ "$confirm" == [yY] || "$confirm" == [yY][eE][sS] ]]; then
... 无论如何,如果您将这个多行版本添加到您的答案中,那将会很有帮助。 - Gabriel Staplesread -p "这个可以吗?(y/n)" confirm && if [[ ! "$confirm" =~ ^[Yy]+([eE][sS])?$ ]]; then echo "不是yes"; fi
这段代码可以匹配 yyyyyyyy
和 yyyyyyes
,但不能匹配 yessssss
、yeeees
、yep
或 N
等。 - NotoriousPyro没错,你需要做类似于这样的事情:
echo -n "Enter Fullname: "
read fullname
另一个选项是让他们在命令行上提供这些信息。在此情况下,Getopts 是最佳选择。
试一下这个
#/bin/bash
read -p "Enter a word: " word
echo "You entered $word"
printf "%s" "Enter fullname: "
read fullname
这是最便携的用提示符读取输入的方式。像read -p
和echo -n
这样的方法更有可能因为使用的shell不同而失败。
https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
从标准输入读取一行,或从作为 -u 选项参数提供的文件描述符 fd 中读取,按照单词拆分中所述的方式拆分成单词,并将第一个单词分配给第一个名称,第二个单词分配给第二个名称,以此类推。如果有多余的单词,则将剩余的单词及其间隔符分配给最后一个名称。
echo "bash is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
bash
将是var1
is awesome
将是var2
echo -e
启用ubuntu手册中的反斜杠转义解释。
echo -n "Enter Fullname: "
read fullname
echo "your full name is $fullname."
echo -n "test type more than 2 word: "
read var1 var2; echo -e
read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
read -e -p "一些提示:" -i "默认值" some_var; echo "$some_var"
- undefined