0

我无法删除 bash 中单个参数的尾部斜杠。

这是有问题的代码

shopt -s extglob
set "${1%%+(/)}"

不幸的是,这包含了所有参数(即$2、$3)并将其变成一个大参数$1。如何使用这种编码风格(避免 sed)删除第一个参数的尾随 /。谢谢

4

2 回答 2

1

How can I remove the trailing /'s on just the first argument

不清楚你的输入值是什么,但你可以使用这样的东西:

s='abc/ 123/ foo/'
echo "${s/\/ / }"
abc 123/ foo/
于 2013-11-02T10:41:57.790 回答
1

你试过这个吗?

shopt -s extglob
set -- "${1%%+(/)}" "${@:2}"

它应该工作,看:

$ shopt -s extglob
$ f() { set -- "${1%%+(/)}" "${@:2}"; printf 'Argument: "%s"\n' "$@"; }
$ f he//o// my/ dear/ friend
Argument: "he//o"
Argument: "my/"
Argument: "dear/"
Argument: "friend"

评论。

  • 这有一个副作用,您应该注意:当不带参数调用时(即,如果$1未设置),它会将第一个位置参数设置为空。看:

    $ f
    Argument: ""
    

    在执行此操作之前,您应该明确检查是否设置了第一个位置参数

  • 我希望您不要试图以这种方式规范化路径。想象一下,你有这样一条路径:

    /path/to/a/banana/././././././././././././/
    

    哎呀。

于 2013-11-02T10:51:14.183 回答