至于./script.sh arg1 [arg2 arg3 ...]
, , ... 的命令行参数arg1
可以通过, , ...arg2
得到,但是参数的个数是$1
$2
不是固定的。
在 shell 脚本中,我想将从 开始的参数传递arg2
给程序,
#/bin/bash
...
/path/to/a/program [I want to pass arg2 arg3 ... to the program]
...
既然可能有一个或多个参数,我该怎么做呢?
答案1
通常的方法是保存一份副本精氨酸1( "$1"
) 并将参数移动一位,因此您可以将整个列表引用为"$@"
:
#!/bin/sh
arg1="$1"
shift 1
/path/to/a/program "$@"
bash 当然有一些数组支持,但所提出的问题不需要它。
如果即使精氨酸1是可选的,你可以像这样检查它:
if [ $# != 0 ]
then
arg1="$1"
shift 1
fi
答案2
您可以使用参数扩展对位置参数进行切片。语法是:
${parameter:offset:length}
如果length
省略,则视为最后一个值。
当您要从第二个参数传递到最后一个参数时,您需要:
${@:2}
例子:
$ foo() { echo "${@:2}" ;}
$ foo bar spam egg
spam egg