bash 如何转换传递给函数的初始参数

bash how to shift through initial arguments passed to a function

我想向 bash 中的一个函数发送多个参数。我怎样才能做到这一点,以便函数正确解析每个参数?

希望尽可能避免使用 eval

这是我尝试使用的代码。

#!/bin/bash

arr_files=(
test_file
test_file1
test_file2
)

user=user10
group=user10

cp_chmod_chown(){
    #  = chmod value
    #  = chown value
    #  = array of files

    chmod_value=
    shift
    chown_value=
    shift
    arr=("$@")
 
    for i in "${arr[@]}"; do
        echo arr value: $i
    done
    echo chmod_value: $chmod_value
    echo chown_value: $chown_value

}

cp_chmod_chown "644" "$user:$group" "${arr_files[@]}"


但是我无法正确地移出前两个参数,因此参数在数组中混杂在一起。这是上面脚本 运行 之后的输出,你可以看到 chown_value 由于某种原因是数组中的第一个值:

# ./cp_arra_chmod_chown.sh

arr value: test_file
arr value: test_file1
arr value: test_file2
chmod_value: 644
chown_value: test_file

我试过将参数按不同的顺序排列,使用引号和不使用引号,我尝试过的似乎都不起作用。 如何将多个参数传递给一个函数?

shift 之后,所有值都会 移动 。下一个代码是错误的,因为在第一个 shift 之后,之前的 </code> 变成了 <code> :

chmod_value=""
shift
chown_value=""
shift

您应该改为:

chmod_value=""
shift
chown_value=""
shift

或者,如果您愿意:

chmod_value=""
chown_value=""
shift 2