将命令参数作为变量传递

将命令参数作为变量传递

我编写了一个 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

相关内容