如何在Shell脚本中合并两个字符串并去除重复字符
合并路径字符串并去除重复前缀的实现方法
针对你给出的场景,这里提供几种在shell环境下的实用实现方式:
方法一:前缀匹配判断(最直接)
利用shell的模式匹配功能,检查第二个字符串是否是第一个的完整子路径,按需选择直接复用或拼接:
str1="/home/username" str2="/home/username/project" if [[ "$str2" == "$str1"/* ]]; then str3="$str2" else # 处理非前缀场景,自动避免双斜杠问题 str3="$str1/${str2#/}" fi echo "$str3"
逻辑说明:
[[ "$str2" == "$str1"/* ]]精准判断str2是否以str1加斜杠开头,确保是完整的路径前缀匹配- 匹配成功时直接用
str2作为结果,因为它已经包含了str1的全部内容 - 不匹配时,用
${str2#/}去掉str2开头的斜杠,再和str1拼接,避免出现//这类无效分隔符
方法二:路径规范化工具(适配复杂路径)
如果路径包含相对路径(比如../)这类复杂结构,可以用realpath工具自动规范化合并结果:
str1="/home/username" str2="/home/username/project" str3=$(realpath -m "$str1/$str2") echo "$str3"
-m参数允许工具处理不存在的路径,最终输出的是去重冗余后的标准路径。
内容的提问来源于stack exchange,提问作者YonghanKim
相关产品推荐
相关产品推荐

