我编写了一个 bash 脚本,使用 restic 备份我的 AWS Ligthsail 服务器。最后一切都正常了,但有一件事我找不到答案。
问题只出现在以下部分:
//Settings
forget_policy=(--keep-within-daily 7d --keep-within-weekly 1m --keep-within-monthly 1y --keep-within-yearly 2y)
//(… other code)
forget_old () {
# Forget and prune
restic -r $RESTIC_REPOSITORY forget "${forget_policy}" --prune | log
# Check if exit status is ok
status=$?
if [ $status -ne 0 ]; then
log "Forget failed ${status}"
exit 1
fi
}
//(… other code)
forget_old
输出
>> invalid argument "--prune" for "--keep-within-daily" flag: no number found
我无法将 $forget_policy 变量传递给 forget 命令。当我将变量包装在“”中时,我得到了
>> unknown flag: --keep-within-daily 7d --keep-within-weekly 1m --keep-within-monthly 1y --keep-within-yearly 2y
当我将变量内容直接复制到命令时,它可以工作。所以我传递变量时一定出了问题。
答案1
扩大每个参数数组元素作为单独的单词,你需要"${forget_policy[@]}"
"${forget_policy}"
相当于"${forget_policy[0]}"
只扩展到第一个参数 - 这就是为什么你最终得到--keep-within-daily --prune
请参阅bash 手册页Arrays
下的子部分。PARAMETERS