使用bash从给定路径中删除不必要的斜杠

cas*_*per 13 bash path

如何摆脱给定路径中不必要的斜线?

例:

p="/foo//////bar///hello/////world"
Run Code Online (Sandbox Code Playgroud)

我想要:

p="/foo/bar/hello/world"
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 24

使用readlink:

p=$(readlink -m "/foo//////bar///hello/////world")
Run Code Online (Sandbox Code Playgroud)

请注意,这将规范化符号链接.如果那不是你想要的,请使用sed:

p=$(echo "/foo//////bar///hello/////world" | sed s#//*#/#g)
Run Code Online (Sandbox Code Playgroud)

  • 可以使用`readlink -m`代替,目录不需要存在. (4认同)

Pau*_*ce. 8

使用纯Bash:

shopt -s extglob
echo ${p//\/*(\/)/\/}
Run Code Online (Sandbox Code Playgroud)


Mat*_*a72 6

使用realpath:

realpath -sm $p

参数:

  -m, --canonicalize-missing   no components of the path need exist
  -s, --strip, --no-symlinks   don't expand symlinks
Run Code Online (Sandbox Code Playgroud)


dsa*_*don 5

您的输入:

p="/foo//////bar///hello/////world"
Run Code Online (Sandbox Code Playgroud)

命令删除不相关的斜杠:

echo $p | tr -s /
Run Code Online (Sandbox Code Playgroud)

输出:

/foo/bar/hello/world
Run Code Online (Sandbox Code Playgroud)