如何从realpath获取的路径中移除/home/前缀?求助
解决路径前缀移除问题
我来帮你看看问题出在哪~你原来的代码里参数展开的语法写错了,这就是"/home/"前缀没被去掉的核心原因。咱们一步步拆解修正:
问题根源
bash中全局替换的语法是${变量//匹配字符串/替换字符串},你写的${fpath//$/home//}完全不符合规则:不仅把匹配内容和替换逻辑搞反了,还误用了特殊字符$(它在正则里表示行尾),多余的斜杠也导致替换根本没生效。
几种正确的解决方法
方法1:前缀删除(最推荐,高效精准)
因为你要移除的是固定开头的前缀,用bash自带的参数展开前缀删除语法最适合:
fpath="$(realpath "$file")" # 用#删除开头最短匹配的/home/,正好符合需求 ffpath="${fpath#/home/}" echo "$ffpath"
如果担心极端场景下有多个重复前缀,也可以用##做最长匹配,但这里#就足够满足需求了。
方法2:sed命令替换
要是你习惯用文本处理工具,sed也能轻松搞定:
fpath="$(realpath "$file")" ffpath=$(echo "$fpath" | sed 's|^/home/||') echo "$ffpath"
这里^表示匹配行开头,s|^/home/||的作用就是把开头的/home/替换成空字符串。
方法3:awk分割路径
awk可以按指定分隔符拆分字符串:
fpath="$(realpath "$file")" ffpath=$(echo "$fpath" | awk -F'/home/' '{print $2}') echo "$ffpath"
-F'/home/'把字符串按/home/分割,取第二部分就是你想要的路径。
额外小提醒
使用realpath时,最好给$file加上双引号(也就是realpath "$file"),避免文件名带空格或特殊字符时出现异常,你原来的代码里没加双引号,这点也建议修正哦。
内容的提问来源于stack exchange,提问作者ian
相关产品推荐
相关产品推荐

