3

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

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

 #!/bin/bash

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

我只想打电话cmd bar baz ...

4

3 回答 3

5

您可以使用shift来移动参数数组。例如,下面的代码:

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

产生,当用1 2 3prints调用时1 2 3,然后2 3

$ ./example.sh 1 2 3
1 2 3
2 3
于 2013-04-19T13:12:05.513 回答
3

shift从 $@ 中删除参数。

班次 [n]

移位位置参数。

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

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

于 2013-04-19T13:08:34.657 回答
0

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

删除第一个参数:with $@

${@#"$1"}

删除第一个参数:with $*

${*#"$1"}

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

${@#"$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/

于 2018-10-26T16:57:37.010 回答