Dav*_*ave 2 arrays parameters bash function
我想向 bash 中的函数发送多个参数。我怎样才能做到这一点,以便函数正确解析每个参数?
如果可能的话希望避免使用eval。
这是我尝试使用的代码。
#!/bin/bash
arr_files=(
test_file
test_file1
test_file2
)
user=user10
group=user10
cp_chmod_chown(){
# $1 = chmod value
# $2 = chown value
# $3 = array of files
chmod_value=$1
shift
chown_value=$2
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[@]}"
Run Code Online (Sandbox Code Playgroud)
但是,我无法正确移出前两个参数,因此参数在数组中混杂在一起。这是运行上述脚本后的输出,您可以看到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
Run Code Online (Sandbox Code Playgroud)
我尝试将参数以不同的顺序放置,并使用引号和不使用引号,我尝试过的似乎都不起作用。如何将多个参数传递给函数?
之后shift,所有值都会发生变化。下一个代码是错误的,因为在first之后shift,前者$2变成$1:
chmod_value="$1"
shift
chown_value="$2"
shift
Run Code Online (Sandbox Code Playgroud)
你应该写:
chmod_value="$1"
shift
chown_value="$1"
shift
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意:
chmod_value="$1"
chown_value="$2"
shift 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |