如何在Bash中移除变量内每个路径的开头点号
Bash变量路径去点号解决方案
方法1:Bash内置字符串替换
直接用Bash的全局替换功能,一步搞定:
# 原变量 myVar="'./favicon.png' './inc/sendEmail.php' './index.html' './images/header-background.jpg'" # 全局替换所有 './' 为 '/' myVar="${myVar//'./'/'/'}" # 验证结果 echo "$myVar"
执行后就能得到目标格式,这个方法简单高效,适合路径不含空格的场景。
方法2:sed命令替换
用sed做文本替换也能实现:
myVar="'./favicon.png' './inc/sendEmail.php' './index.html' './images/header-background.jpg'" myVar=$(echo "$myVar" | sed "s/'\.\//'\//g") echo "$myVar"
sed的s/'\.\//'\//g规则会把所有'./替换成'/,g代表全局替换所有匹配项。
方法3:数组处理(兼容含空格的路径)
如果你的路径可能包含空格,直接处理字符串容易出问题,用数组逐个处理更稳妥:
myVar="'./favicon.png' './inc/sendEmail.php' './index.html' './images/header-background.jpg'" # 将字符串解析为数组(保留每个带单引号的路径作为独立元素) eval "paths=($myVar)" # 遍历数组清理每个路径 cleaned_paths=() for p in "${paths[@]}"; do # 去掉开头的 './' 部分,再重新包裹单引号 cleaned_p="'${p#\'.\/}'" cleaned_paths+=("$cleaned_p") done # 把数组转回字符串 myVar="${cleaned_paths[*]}" echo "$myVar"
这个方法能应对更复杂的路径场景,避免空格导致的分割错误。
内容的提问来源于stack exchange,提问作者Pankaj Devrani
相关产品推荐
相关产品推荐

