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

时间:2013-04-19 13:04:19

标签: bash parameter-passing

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

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

 #!/bin/bash

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

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

3 个答案:

答案 0 :(得分:2)

shift从$ @中删除参数。

  

shift [n]

     

移位位置参数。

     

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

     

退出状态:      除非N为负数或大于$#。

,否则返回成功

答案 1 :(得分:2)

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

#!/bin/bash
echo $@
shift
echo $@
使用1 2 3调用时,

会生成1 2 3,然后2 3

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

答案 2 :(得分:0)

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

删除第一个参数:$ @

${@#"$1"}

删除第一个参数:$ *

${*#"$1"}

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

${@#"$1$2"}

$ @或$ *都可以使用,因为扩展的结果是字符串。

链接:
Remove a fixed prefix/suffix from a string in Bash
http://www.tldp.org/LDP/abs/html/abs-guide.html#ARGLIST

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