如何在Bash中同时实现变量替换与全大写转换?
Bash:同时实现变量替换与全大写转换
问题场景
我编写了如下Bash代码:
target='xfce/*' file_name="All files from ${target/\/*}"
执行后续的输出命令:
echo "Copying [$file_name] folder"
实际输出为:
Copying [All files from xfce] folder
但我需要的输出是:
Copying [All files from XFCE] folder
(要求xfce转为全大写的XFCE)
我知道${var^^}可以把变量转成全大写,但不知道怎么把替换操作和大写转换结合在一起。试了下面两种写法都失败了:
file_name="All files from ${target/\/*^^}"
file_name="All files from ${target^^/\/*}"
想问有没有办法在同一个参数扩展里完成这两个操作?
解决方法
可以用嵌套参数扩展来实现,先做替换,再对替换后的结果转大写,写法如下:
target='xfce/*' file_name="All files from ${${target/\/*}^^}"
运行后执行echo命令,就能得到你想要的输出。
原理拆解
- 内层
${target/\/*}:先把target里的/*替换为空,得到字符串xfce - 外层
${...^^}:把内层输出的xfce转换成全大写的XFCE
如果觉得嵌套写法可读性差,也可以拆成两步(逻辑更清晰,效果完全一致):
target='xfce/*' clean_target=${target/\/*} # 先清理掉/*部分 file_name="All files from ${clean_target^^}" # 再转大写
内容的提问来源于stack exchange,提问作者resu-xuniL
相关产品推荐
相关产品推荐

