在Bash函数中使用所有参数的子范围

时间:2012-08-30 13:48:13

标签: bash bash-function

我在Bash脚本中有这个功能:

comp() {
    rsync -v --archive $1/ $TMP/$2 $3 $4 $5 $6 $7 $8 $9
}

正如您所看到的,我正在使用参数$1$2做一些特别的事情。然后我匆匆将其余的所有其余部分追加到命令的末尾。他们转到$9,但事实上所有都应该追加。

必须有一种更简单的方法吗?

2 个答案:

答案 0 :(得分:5)

您可以使用子字符串扩展,这在某些情况下可能很有用。尽管如此,我必须说我更喜欢Brian的移位解决方案,因为它更清晰一点。 (另外,Brian的解决方案是POSIX;子串扩展是bash扩展。)

comp () {

    rsync -v --archive "$1"/ "$TMP/$2" "${@:3}"

}

答案 1 :(得分:4)

我不一定称之为“更容易”,但你可以这样做:

comp() {
    archive=$1
    tempfile=$2
    shift 2
    rsync -v --archive $archive/ $TMP/$tempfile "$@"
}

这使您无需硬编码3美元到11美元。