将命令行参数传递给 shell 脚本内的程序

将命令行参数传递给 shell 脚本内的程序

至于./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

相关内容