Bash中如何获取点分隔字符串的首个值并存储到变量
在Bash中提取点分隔字符串第一个点前的子串
你现有代码的问题
- 变量赋值错误:直接写
$chicken.fasta.count.sorted.topthree.txt会被Bash当作变量解析,正确写法是用双引号包裹字符串:s="chicken.fasta.count.sorted.topthree.txt" - 参数展开用法错误:
${s%.*}是从字符串末尾删除最短的.xxx后缀,执行后会得到chicken.fasta.count.sorted.topthree,并非你需要的第一个点前内容;同时代码还缺少闭合的}
正确实现方法
方法1:Bash内置参数展开(推荐,效率最高)
使用${s%%.*}语法,它会从字符串末尾删除最长的.xxx后缀,直接保留第一个点之前的内容:
s="chicken.fasta.count.sorted.topthree.txt" animal_name="${s%%.*}" echo $animal_name # 输出结果:chicken
方法2:使用cut命令
指定分隔符为.,提取第一个字段:
s="chicken.fasta.count.sorted.topthree.txt" animal_name=$(echo "$s" | cut -d '.' -f 1) echo $animal_name
方法3:使用awk命令
按.分割字符串,输出第一个字段:
s="chicken.fasta.count.sorted.topthree.txt" animal_name=$(echo "$s" | awk -F '.' '{print $1}') echo $animal_name
内容的提问来源于stack exchange,提问作者Arjun Harer
相关产品推荐
相关产品推荐

