shell字符串操作

字符串变量string中含有=,如何提取=左边或右边的内容

提取=右边内容  ${string#*=}提取=左边内容  ${string%=*}

 

💡 原理详解

这两种语法都属于Shell的参数扩展中的模式删除操作

1. 提取右边内容 ${string#*=}

  • #表示从字符串开头(左边)匹配并删除模式。

  • *是通配符,代表任意长度的任意字符。

  • *=合起来表示匹配的模式是“任意字符直到遇到第一个等号”,包括等号本身。

  • 因此,整个操作的意思是:从字符串开头开始,删除最短匹配*=模式的部分,剩下的就是等号右边的部分

2. 提取左边内容 ${string%=*}

  • %表示从字符串末尾(右边)匹配并删除模式。

  • =%*表示匹配的模式是“一个等号加上等号后的任意字符”。

  • 因此,整个操作的意思是:从字符串末尾开始,删除最短匹配=*模式的部分,剩下的就是等号左边的部分

 

🔄 其他相关用法

了解#%的“贪婪”版本——##%%——也很有用,它们会进行最长匹配(即尽可能多地删除)。

  • ${string##*=}:如果字符串中有多个等号(如path=/home/user=/docs),这个操作会删除直到最后一个等号的所有内容,只返回最后一部分(docs)。

  • ${string%%=*}:同样针对多个等号的情况,这个操作会从末尾删除直到第一个等号的所有内容,返回最开头一部分(path

🛠️ 实际应用示例

假设你有一个配置文件,每行都是一个key=value对,你可以这样处理:

#!/bin/bash
config_line="Database_Host=192.168.1.100"

# 提取键(key)和值(value)
key="${config_line%=*}"    # 结果为 Database_Host
value="${config_line#*=}"  # 结果为 192.168.1.100

echo "Key is: $key"
echo "Value is: $value"

💎 小结

简单来说,记忆口诀是:#掐头,%去尾。配合通配符*,就能精准地提取出等号左边或右边的内容。这种方法纯粹基于Shell内置的字符串处理功能,不需要启动外部命令,效率很高

 

posted on 2026-01-07 09:51  Karlkiller  阅读(3)  评论(0)    收藏  举报

导航