假设我有一个函数abc(),它将处理与分析传递给脚本的参数相关的逻辑。
我怎么能把我的Bash脚本收到的所有参数传递给abc()?参数的数量是可变的,所以我不能像这样硬编码传入的参数:
abc $1 $2 $3 $4
更好的是,我的函数是否有办法访问脚本参数的变量?
假设我有一个函数abc(),它将处理与分析传递给脚本的参数相关的逻辑。
我怎么能把我的Bash脚本收到的所有参数传递给abc()?参数的数量是可变的,所以我不能像这样硬编码传入的参数:
abc $1 $2 $3 $4
更好的是,我的函数是否有办法访问脚本参数的变量?
当前回答
值得一提的是,您可以使用此语法指定参数范围。
function example() {
echo "line1 ${@:1:1}"; #First argument
echo "line2 ${@:2:1}"; #Second argument
echo "line3 ${@:3}"; #Third argument onwards
}
我没看到有人提到过。
其他回答
我需要一个变种,我希望对其他人有用:
function diffs() {
diff "${@:3}" <(sort "$1") <(sort "$2")
}
“${@:3}”部分表示数组中从3开始的所有成员。因此,这个函数通过sort将前两个参数传递给diff,然后将所有其他参数传递给diff,从而实现了一个排序后的diff,因此您可以类似于diff调用它:
diffs file1 file2 [other diff args, e.g. -y]
值得一提的是,您可以使用此语法指定参数范围。
function example() {
echo "line1 ${@:1:1}"; #First argument
echo "line2 ${@:2:1}"; #Second argument
echo "line3 ${@:3}"; #Third argument onwards
}
我没看到有人提到过。
abc "$@"
$@表示提供给bash脚本的所有参数。
使用$@变量,它扩展为所有用空格分隔的命令行参数。
abc "$@"
这是一个简单的脚本:
#!/bin/bash
args=("$@")
echo Number of arguments: $#
echo 1st argument: ${args[0]}
echo 2nd argument: ${args[1]}
$#是脚本接收到的参数数量。我发现使用数组更容易访问它们:args=("$@")行将所有参数放在args数组中。使用${args[index]}访问它们。