Shell脚本中如何截取特殊字符前字符串并赋值给变量
解决Shell脚本中截取特殊字符前字符串的问题
你的写法有两个关键问题导致无法正常工作:一是变量赋值时等号两边不能有空格,二是管道命令需要结合命令替换才能把结果赋值给变量。下面给你几种可行的解决方案:
方法1:结合echo、cut与命令替换
这是最贴近你原本思路的修改方式,通过echo输出变量值,再用管道传给cut处理,最后用$()包裹整个命令完成赋值:
var1="abcd.123" # 模拟你从文件读取到的值 var2=$(echo "$var1" | cut -f1 -d".") echo "$var2" # 输出:abcd
方法2:用Shell内置参数扩展(更高效)
不需要调用外部cut命令,直接用Shell的参数扩展功能,性能更好也更简洁:
var1="abcd.123" var2="${var1%%.*}" echo "$var2" # 输出:abcd
这里的${var1%%.*}表示从字符串右侧开始,删除最长的匹配./*的部分——也就是删掉第一个.及之后的所有内容,刚好得到你想要的abcd。如果你的字符串有多个.(比如abcd.123.456),这种写法会直接保留最前面的部分;如果只想删除第一个.后面的内容(保留abcd.123),可以改成${var1%.*}。
常见错误提醒
- 变量赋值时,
var2=xxx的等号两边绝对不能有空格,否则Shell会把var2当成命令执行,这是新手常犯的错误。 - 管道命令的输出无法直接赋值给变量,必须用
$()或反引号`包裹整个管道命令,才能把命令的输出结果赋值给变量。
内容的提问来源于stack exchange,提问作者Dileep Domakonda
相关产品推荐
相关产品推荐

