在 bash shell 中如何删除路径的最后一个“/”?

Kan*_*bot 6 bash shell-script

比如说我有一条类似的路径

path_1=/this/is/a/path/with/slash/
Run Code Online (Sandbox Code Playgroud)

我如何获得以下信息:

/this/is/a/path/with/slash
Run Code Online (Sandbox Code Playgroud)

所以路径没有最后一个“/”

Rud*_*diC 29

所有 POSIX shell 都有(参见man bash)“参数扩展:删除匹配的后缀模式”。所以,使用

$ echo "${path_1%/}"
/this/is/a/path/with/slash
Run Code Online (Sandbox Code Playgroud)

如果变量的值不以斜杠结尾,则该值将不加修改地输出。

  • 这有一个可能的问题:如果路径只是“/”(即文件系统根目录),您*不*想删除“/”,因为它会变成空字符串,这意味着完全不同的东西。 (5认同)

小智 11

您可以使用realpath

DIR=/tmp/foo///
echo "$(realpath -s "$DIR")"
# output: /tmp/foo
Run Code Online (Sandbox Code Playgroud)