You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:05:20