Bash提取路径最后段并赋值变量遇问题,求解决方法
解决路径最后部分提取问题
方法1:修正expr命令写法
原代码的问题在于expr使用的POSIX基本正则表达式中,捕获组需要用\( \)而非(),且需要匹配前缀部分。修正后代码:
Base=/home/user2/SetOne Set="$(expr "$Base" : '.*/\([^/]*\)')" echo "$Set" # 输出SetOne
方法2:使用bash内置参数扩展(推荐)
无需调用外部命令,直接用bash的参数扩展功能,效率更高:
Base=/home/user2/SetOne Set="${Base##*/}" echo "$Set" # 输出SetOne
${Base##*/}的含义是:从变量Base的开头开始,删除最长的匹配*/的部分,剩余内容就是路径的最后一段。
方法3:使用basename命令
basename是专门用于提取路径最后组件的工具,用法简单直接:
Base=/home/user2/SetOne Set="$(basename "$Base")" echo "$Set" # 输出SetOne
内容的提问来源于stack exchange,提问作者hardt27
相关产品推荐
相关产品推荐

