bash 命令拆分给出错误

bash 命令拆分给出错误

我在尝试为 rclone 创建 bash 脚本时遇到问题

这给我一个错误:

20d: command not found


DAYS='20d'
PURGE='purge --min-age' ${DAYS}
rclone ${PURGE} ${DEST}/old/ $VERBOSE $LOGS

这有效

PURGE='purge --min-age 20d'
rclone ${PURGE} ${DEST}/old/ $VERBOSE $LOGS

有人可以帮我一下,这样我就可以使用第一个吗?如果其他人所要做的就是更改 DAYS,那么其他人就可以更轻松地使用此脚本

答案1

您对PURGE变量的引用导致了这种情况。

目前您正在设置:

PURGE='purge --min-age'

进而执行 ${DAYS}(20d)PURGE其环境中的变量。

您可能想要:

purge=(purge --min-age "$days")

(与不带引号的变量相比,数组是保存命令行参数更安全的方法)

你会这样称呼它:

rclone "${purge[@]}" "${dest}/old" "$verbose" "$logs"

注意:环境变量只能使用大写变量名。


举个例子:

$ FOO=bar env | grep FOO
FOO=bar
$ env | grep FOO
$

我们将FOO变量设置为bar,然后env在其环境中使用该变量执行命令。

您收到错误是因为20d这不是有效的命令。

相关内容