如何删除第一个 bash 参数并将其他参数传递给另一个命令?

问题描述 投票:0回答:3

在 bash

$@
包含用于调用脚本的所有参数,但我正在寻找删除第一个参数的解决方案

./wrapper.sh foo bar baz ...:

 #!/bin/bash

 # call `cmd` with bar baz ... (withouyt foo one)

我只想打电话

cmd bar baz ...

bash parameter-passing
3个回答
7
投票

您可以使用

shift
来移动参数数组。 例如下面的代码:

#!/bin/bash
echo "$@"
shift
echo "$@"

产生,当用

1 2 3
调用时打印
1 2 3
然后打印
2 3
:

$ ./example.sh 1 2 3
1 2 3
2 3

3
投票

shift
从 $@ 中删除参数。

移动[n]

移动位置参数。

将位置参数 $N+1,$N+2 ... 重命名为 $1,$2 ... 如果 N 是 未给出,假定为 1。

退出状态: 返回成功,除非 N 为负数或大于 $#。


1
投票

环境变量扩展!是一个非常便携的解决方案。

删除第一个参数:用$@

${@#"$1"}

删除第一个参数:用 $*

${*#"$1"}

删除第一个和第二个参数:使用 $@

${@#"$1$2"}

$@ 或 $* 都可以工作,因为扩展的结果是一个字符串。

链接:
从 Bash 中的字符串中删除固定前缀/后缀
http://www.tldp.org/LDP/abs/html/abs-guide.html#ARGLIST

变量扩展是可移植的,因为它是在 gnu core-utils 下定义的
在此链接中搜索“环境变量扩展”:
https://www.gnu.org/software/coreutils/manual/html_node/

© www.soinside.com 2019 - 2024. All rights reserved.