如何编写Bash函数存储用户输入及将Mac Bash语句转为复用函数
Bash脚本问题解答
问题1:如何编写一个Bash函数,将用户输入保存到新的变量名中?
在Bash里,我们可以利用间接赋值的特性来实现这个需求——让函数接收一个变量名作为参数,然后把用户输入直接存到这个变量里。这里有个简洁的实现:
save_user_input() { # 第一个参数是提示文本,第二个是要存储输入的变量名 local prompt="$1" local var_name="$2" # 用read命令把输入赋值给指定的变量名 read -p "$prompt: " "$var_name" }
用法示例:
# 调用函数,提示用户输入名字,存到username变量里 save_user_input "请输入你的名字" username # 之后就能直接使用这个变量了 echo "你好,$username!"
原理很简单:read命令支持把变量名作为参数,它会自动将用户输入赋值给那个变量,不需要额外的复杂操作。
问题2:将Mac Bash语句转为可复用函数
你的原语句逻辑是:如果var变量为空/未设置,就输出加粗的问题,然后读取用户输入到var里。我们可以把这个逻辑封装成一个函数,让它支持自定义问题文本和目标变量名,正好符合你想要的userInput "Question for User" var调用方式。
实现代码:
userInput() { local question="$1" local var_name="$2" # 检查目标变量是否未设置或为空(用间接引用${!var_name}获取变量值) if [[ -z "${!var_name}" ]]; then # 输出加粗的问题,和原语句的格式保持一致 echo -e "\n$(tput bold)$question$(tput sgr0)" # 读取输入并赋值给指定变量 read "$var_name" fi }
用法示例:
# 先定义一个空变量(或者不定义,函数也能处理) var="" # 调用函数,传入问题和变量名 userInput "Question for User" var # 验证结果 echo "你输入的内容是:$var"
和原语句的对应说明:
- 原语句的
test $var用来检查变量是否非空,我们换成了更严谨的[[ -z "${!var_name}" ]],能更好地处理变量未设置或者为空字符串的情况。 - 加粗文本的部分完全保留了原语句的
tput bold和tput sgr0,确保输出格式一致。 - 最后用
read "$var_name"实现了间接赋值,和第一个问题的原理一样。
这样你只需要调用这个函数30次,每次传入不同的问题和变量名,就能大幅简化脚本啦!
内容的提问来源于stack exchange,提问作者callaginn
相关产品推荐
相关产品推荐

