我无法删除 bash 中单个参数的尾部斜杠。
这是有问题的代码
shopt -s extglob
set "${1%%+(/)}"
不幸的是,这包含了所有参数(即$2、$3)并将其变成一个大参数$1。如何使用这种编码风格(避免 sed)删除第一个参数的尾随 /。谢谢
How can I remove the trailing /'s on just the first argument
不清楚你的输入值是什么,但你可以使用这样的东西:
s='abc/ 123/ foo/'
echo "${s/\/ / }"
abc 123/ foo/
你试过这个吗?
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/././././././././././././/
哎呀。