Bash中如何通过单次赋值去除Shell变量首尾指定字符串?
Bash单次修剪字符串首尾指定字符的单次赋值方法
当然有办法,下面是几种纯Bash内置、无需函数的单次赋值实现方式:
嵌套参数扩展(推荐,Bash 2.05b+支持)
利用Bash允许参数扩展嵌套的特性,把前缀修剪和后缀修剪合并到一个表达式里,单次赋值完成操作:var="[BASH]" trimmed="${${var#[}%]}" echo "$trimmed" # 输出: BASH这个写法里,
${var#[}先去掉开头的[,外层的%]再去掉结果末尾的],全程是一次参数扩展计算,对应单次赋值。正则表达式替换(Bash 3.0+支持)
用Bash的模式替换功能,匹配整个字符串的首尾特征并提取中间内容:var="[BASH]" trimmed="${var/^\[(.*)\]$/\1}" echo "$trimmed" # 输出: BASH这里的模式
^\[(.*)\]$会匹配以[开头、]结尾的字符串,\1引用中间捕获到的内容,直接替换为目标结果。如果字符串首尾不是[和],这个替换不会生效,原字符串会被保留。固定长度截取(仅适用于首尾字符固定为单个的场景)
如果确定首尾只有一个指定字符(比如这里的[和]),还可以用位置截取:var="[BASH]" trimmed="${var:1:-1}" echo "$trimmed" # 输出: BASH这种写法更简洁,但要注意:如果字符串长度不足2(比如空串、只有
[),结果可能不符合预期,所以只适合确定输入格式的场景。
内容的提问来源于stack exchange,提问作者Ihar Katkavets
相关产品推荐
相关产品推荐

