【问题标题】:How to remove first bash argument and pass the others to another command?如何删除第一个 bash 参数并将其他参数传递给另一个命令?
【发布时间】:2013-04-12 21:17:13
【问题描述】:

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

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

 #!/bin/bash

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

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

【问题讨论】:

标签: bash parameter-passing


【解决方案1】:

您可以使用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】:

shift 从 $@ 中删除参数。

移位 [n]

移位位置参数。

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

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

【讨论】:

    【解决方案3】:

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

    去掉第一个参数:with $@

    ${@#"$1"}
    

    去掉第一个参数:with $*

    ${*#"$1"}
    

    去掉第一个和第二个参数:with $@

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2012-07-08
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多