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) 收藏 举报
浙公网安备 33010602011771号