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

Bash如何将字符串转为小写并将变更存储到更新后的变量中

问题原因

原代码转换逻辑失效的核心原因有两点:

  • 管道|两侧的命令运行在独立子shell中,子shell内的变量变更不会回传到当前主shell,无法直接通过管道给当前环境的变量赋值
  • 管道仅传递前序命令的标准输出,原写法里的response="$response"只是单纯的变量赋值操作,没有任何输出内容,后续的tr命令根本接收不到待转换的字符串
可用修复方案

方案1:全环境兼容写法(支持所有POSIX标准shell)

用命令替换$()捕获tr命令的转换结果,再赋值回变量,替换原有转换行即可,兼容性最好:

response=$(echo "$response" | tr '[:upper:]' '[:lower:]')

方案2:Bash原生写法(Bash 4.0及以上版本支持)

直接用Bash内置的参数扩展语法完成转换,不需要调用外部进程,执行效率更高:

# 字符串全转小写
response=${response,,}
# 补充:如果需要全转大写可使用 ${response^^}
修正后完整可运行代码

额外给变量引用加上了双引号包裹,避免用户直接回车输入空内容时,条件判断语句报语法错误:

#!/usr/bin/env bash -e

echo "To reset cluster on existing EKS cluster, we must first destroy the existing cluster."
read -p "Do you want to auto-approve the terraform destroy (y/n): " response

# 两种转换写法二选一即可,示例用兼容性最广的tr方案
response=$(echo "$response" | tr '[:upper:]' '[:lower:]')

echo "$response"

if [ "$response" = 'y' ]; then
    echo "Destroy is auto-approved."
else 
    echo "Destroy is not auto-approved"
fi

内容的提问来源于stack exchange,提问作者Hofbr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:12:15