【发布时间】:2017-10-10 18:24:21
【问题描述】:
有没有办法做到以下几点?
#!/bin/bash -x
IPFILE_LIST=(
/copytest/test1
/copytest/test2/test.conf
/copytest/test3/test3/test3
/copytest/test4/test4
)
CopyFunction() {
for i in "${$1[@]}"; do
rsync -R $2 $3
done
}
CopyFunction 'IPFILE_LIST' $i copytestdest
函数最终会是什么样子
CopyFunction() {
for i in "${IPFILE_LIST[@]}"; do
rsync -R $i /copytestdest/
done
}
它会执行rsync数组中的每个项目,最后我应该得到以下输出
copytestdest/copytest/test1
copytest/test2/test.conf
copytestdest/copytest/test3/test3/test3
copytestdest/copytest/test4/test4
如果可能的话,我也想在同一个函数中支持跟随,否则它可能需要另一个函数
CopyFunction copytestdest 'IPFILE_LIST'
【问题讨论】:
-
那是在问“如何在函数中使用数组作为位置参数”,对吧?
-
我的首选答案是推荐使用 namerefs (
local -n),但这需要 Bash 4.3 或更高版本。有关用法示例,另请参阅 Bash hackers wiki。 -
不,我不认为我想要的是将数组作为参数传递,我想循环遍历数组并运行 rsync 命令
-
看起来您将数组作为参数传递给
CopyFunction IPFILE_LIST。local -n可以让你做你想做的事。 -
可以,但这不是我想要的,我希望传递文本“IPFILE_LIST”,然后在 $1 中使用
标签: arrays bash function loops variables