假设我有一个函数abc(),它将处理与分析传递给脚本的参数相关的逻辑。

我怎么能把我的Bash脚本收到的所有参数传递给abc()?参数的数量是可变的,所以我不能像这样硬编码传入的参数:

abc $1 $2 $3 $4

更好的是,我的函数是否有办法访问脚本参数的变量?


当前回答

abc "$@"

$@表示提供给bash脚本的所有参数。

其他回答

abc "$@"

$@表示提供给bash脚本的所有参数。

使用$@变量,它扩展为所有用空格分隔的命令行参数。

abc "$@"

这是一个简单的脚本:

#!/bin/bash

args=("$@")

echo Number of arguments: $#
echo 1st argument: ${args[0]}
echo 2nd argument: ${args[1]}

$#是脚本接收到的参数数量。我发现使用数组更容易访问它们:args=("$@")行将所有参数放在args数组中。使用${args[index]}访问它们。

ABC“$@”通常是正确答案。 但是我试图将一个参数传递给一个su命令,再多的引用也不能阻止错误su: unrecognized选项“——myoption”。真正对我有用的是将所有参数作为单个字符串传递:

abc "$*"

我的具体案例(我确定其他人需要这个)在我的.bashrc中

# run all aws commands as Jenkins user
aws ()
{
    sudo su jenkins -c "aws $*"
}

值得一提的是,您可以使用此语法指定参数范围。

function example() {
    echo "line1 ${@:1:1}"; #First argument
    echo "line2 ${@:2:1}"; #Second argument
    echo "line3 ${@:3}"; #Third argument onwards
}

我没看到有人提到过。