答案1
不是“仅限 Bash”的答案,但也许有用:
echo "$PWD///" | tr -s '/'
答案2
可以在“pure bash”中使用,但仅限于extglob
active。
$ shopt -s extglob
$ A="////qsd/////sdfgfg//qsd//////"
$ echo ${A//\/+(\/)/\/}
/qsd/sdfgfg/qsd/
答案3
仅 Bash,通过使用变量:
# code:
shopt -s extglob
A="$PWD//";
echo "Original: $A";
echo "Result: ${A//+(\/)//}"
# output:
Original: /home/myhome/Projects/Bob/build//
Result: /home/myhome/Projects/Bob/build/
// = 搜索和替换,继续搜索和替换
+(/) = 匹配一个或多个“/”
// = 替换为“/”
为了更好的视觉示例,我们假设“z”需要被挤压才能更好地看到这一点,而无需转义斜杠,并且不要让我们的搜索/替换与 ${VAR//pattern/string} 的基础结构混淆:
# code:
shopt -s extglob
A=zzz/zzz/zzzzz/zzzz/zzzz;
echo $A;
echo ${A//+(z)/z}
# output:
zzz/zzz/zzzzz/zzzz/zzzz
z/z/z/z/z
答案4
更新:垫(+1)有正确的想法......我的答案仅适用于奇数个“/”
确实如此不是需要设置“extglob”。
var="$PWD///"; var="${var//\/\//}" ;回显“$var”