能否一次性组合执行多个Bash变量操作?
这个问题我之前也碰到过!Bash确实不支持直接嵌套参数展开——就像你试的${${foo^^}:0:4}会直接报bad substitution错误,但其实有几种优雅的一次性实现方式,我给你梳理一下:
最优方案(Bash 4.2+)
如果你的Bash版本是4.2及以上,有个极简的纯参数展开写法:直接在截取操作后追加大小写转换修饰符,Bash会先执行截取,再把结果转成大写:
foo="string_that_is_lower" echo "${foo:0:4^^}" # 输出 STRI
这个写法完全符合你的需求:一次性完成截取前4个字符+转大写的操作,不需要任何外部命令或临时变量,纯Bash内置语法搞定。
兼容旧版本Bash的方案
要是你用的Bash版本比较老(低于4.2),可以试试这两种方法:
子shell捕获结果后截取
利用$()执行转大写的参数展开,再对返回的结果做截取:foo="string_that_is_lower" echo "${$(echo "${foo^^}"):0:4}" # 输出 STRI临时变量一行完成
用read命令临时存储转大写后的字符串,紧接着执行截取操作,全程一行搞定:foo="string_that_is_lower" read -r temp <<< "${foo^^}" && echo "${temp:0:4}" # 输出 STRI
另外补充个小细节:因为你的原字符串是全小写,先把整个字符串转大写再截取前4个,和先截取再转大写的结果完全一致,所以也可以用管道写法(不过你已经知道这种方式,这里就当补充啦):
foo="string_that_is_lower" echo "${foo^^}" | cut -c1-4 # 输出 STRI
内容的提问来源于stack exchange,提问作者Luke Mlsna
相关产品推荐
相关产品推荐

