最简洁高效的方式是使用 Bash 4.0+ 内置参数扩展:${var^^}转大写、${var,,}转小写、${var^}首字母大写、${var,}首字母小写;declare -u/-l可声明自动转换变量;旧版可用tr或awk;文件名重命名需用rename命令。

Linux Shell 中对变量内容做大小写转换,最简洁高效的方式是使用 Bash 内置的参数扩展语法(Bash 4.0+),无需调用外部命令,执行快、可读性强、适合脚本内直接处理。
用 ${var^^} 和 ${var,,} 直接转换全部字母
这是现代 Bash(≥4.0)推荐的写法,语法轻量、原地生成新值,不改变原变量:
- ${var^^}:把变量 所有小写字母 转为大写
- ${var,,}:把变量 所有大写字母 转为小写
- ${var^}:仅首字母转大写(其余不变)
- ${var,}:仅首字母转小写(其余不变)
示例:
$ text="Hello World 123"$ echo "${text^^}"
HELLO WORLD 123
$ echo "${text,,}"
hello world 123
$ echo "${text^}"
Hello World 123
$ echo "${text,}"
hello World 123
用 declare -u 或 declare -l 声明变量自动转换
适用于需多次赋值、希望变量“始终维持指定大小写”的场景。声明后,后续所有赋值都会自动转换:
- declare -u var:变量值恒为大写
- declare -l var:变量值恒为小写
注意:declare 不影响已有值,只对之后的赋值生效;低版本 Bash(如 3.x)不支持。
$ UPPER="hello"
$ echo "$UPPER"
HELLO
$ declare -l lower
$ lower="ABC123def"
$ echo "$lower"
abc123def
兼容旧版 Bash 的方案:tr 或 awk
若运行环境 Bash 版本较低(如 CentOS 6 默认的 4.1.2 以下),可用传统命令配合命令替换:
- 转大写:
UPPER=$(echo "$var" | tr '[:lower:]' '[:upper:]') - 转小写:
LOWER=$(echo "$var" | tr '[:upper:]' '[:lower:]') - 或用 awk:
UPPER=$(echo "$var" | awk '{print toupper($0)}')
注意:tr 中推荐使用 [:lower:] 而非 a-z,避免 locale 影响(如某些语言环境 a-z 不覆盖全部小写字母)。
区分大小写转换与文件名重命名
变量替换只作用于字符串内容。若需批量修改文件名大小写,请用 rename 命令(Perl 风格):
- 全小写:
rename 'y/A-Z/a-z/' * - 全大写:
rename 'y/a-z/A-Z/' *
该操作与变量无关,属于文件系统层面处理,需谨慎测试,避免覆盖冲突。


















