【发布时间】: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 $@ 中包含用于调用脚本的所有参数,但我正在寻找删除第一个参数的解决方案
./wrapper.sh foo bar baz ...:
#!/bin/bash
# call `cmd` with bar baz ... (withouyt foo one)
我只想打电话给cmd bar baz ...
【问题讨论】:
您可以使用shift 来移动参数数组。比如下面的代码:
#!/bin/bash
echo $@
shift
echo $@
产生,当用1 2 3 调用时打印1 2 3 然后2 3:
$ ./example.sh 1 2 3
1 2 3
2 3
【讨论】:
$@(例如echo "$@")以避免奇怪的解析。见"I just assigned a variable, but echo $variable shows something else" 和"When should I double-quote a parameter expansion?"
shift 从 $@ 中删除参数。
移位 [n]
移位位置参数。
将位置参数 $N+1,$N+2 ... 重命名为 $1,$2 ... 如果 N 是 未给出,假定为 1。
退出状态: 除非 N 为负数或大于 $#,否则返回成功。
【讨论】:
环境变量扩展!是一个非常便携的解决方案。
去掉第一个参数: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/
【讨论】: