如何通过单行命令实现Bash用户输入一致性验证?若不行用变量内嵌函数可行吗?
验证两次输入一致性的单行命令与Bash函数方案
好问题!咱们先解决单行命令的需求,再聊聊函数存变量的可行性:
一、单行命令实现两次输入验证
完全可以用一行Bash命令实现这个需求,核心思路是用无限循环+两次读取输入+对比判断,直到两次输入一致才退出。
通用内容(如姓名)的单行命令:
while :; do read -p "请输入内容: " val1; read -p "请再次输入: " val2; [ "$val1" = "$val2" ] && echo "输入一致!" && break || echo "两次输入不一致,请重新输入!"; done
密码类敏感内容的单行命令(隐藏输入):
如果是密码这类需要隐藏输入的内容,把read换成read -s(静默模式,不回显输入内容)即可:
while :; do read -s -p "请输入密码: " val1; echo; read -s -p "请再次输入密码: " val2; echo; [ "$val1" = "$val2" ] && echo "密码设置成功!" && break || echo "两次输入密码不一致,请重新输入!"; done
命令解释:
while :创建一个无限循环,直到遇到break才退出- 两次
read分别获取用户的两次输入 [ "$val1" = "$val2" ]对比两次输入的内容- 若一致则输出提示并
break终止循环;若不一致则提示错误,循环继续
二、将Bash函数存入变量的可行性
这个方案是可行的,但需要注意正确的写法(借助eval来加载函数)。不过先说明:直接定义函数比存变量再加载更易读、更易维护,但如果确实需要把函数逻辑存在变量里,也可以实现。
函数存变量的示例:
# 将函数定义字符串存入变量 validate_func='validate() { local prompt="$1"; while :; do read -p "请输入$prompt: " val1; read -p "请再次输入$prompt: " val2; [ "$val1" = "$val2" ] && echo "$prompt输入一致!" && return 0 || echo "两次输入不一致,请重新输入!"; done }' # 用eval加载变量中的函数 eval "$validate_func" # 调用函数,比如验证姓名 validate "姓名"
更推荐的常规函数写法:
如果没有特殊需求,直接定义函数会更清晰,避免eval带来的潜在安全风险(当变量内容不可信时):
validate_input() { local prompt="$1" while :; do read -p "请输入$prompt: " val1 read -p "请再次输入$prompt: " val2 if [ "$val1" = "$val2" ]; then echo "$prompt输入一致!" return 0 else echo "两次输入不一致,请重新输入!" fi done } # 调用示例 validate_input "姓名" validate_input "密码"
内容的提问来源于stack exchange,提问作者Arcticooling
相关产品推荐
相关产品推荐

