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
我想向 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