Как передать список аргументов в одну переменную, а не триггер SC2096?

В скрипте bash я определяю часто используемые параметры rsync, например:

opts="--checksum --delete --recursive --update --progress --omit-dir-times --no-perms"

Позже я использую это в нескольких вызовах rsync, например:

rsync $opts /from/here /to/there

Shellcheck жалуется на SC2086: "SC2086: двойная кавычка для предотвращения разбивки и разделения слов".

Но когда я цитирую $opts как это:

rsync "$opts" /from/here /to/there

Rsync жалуется (конечно):

Ошибка rsync: синтаксис или ошибка использования (код 1)

Я понимаю, что могу отключить предупреждения о проверке оболочки, но, похоже, должен быть лучший способ.

Может быть, положить параметры в массиве?

opts=(--checksum --delete --recursive --update --progress --omit-dir-times --no-perms)
rsync "${opts[@]}" /from/here /to/there

Это идиоматично? Существуют ли более эффективные способы (мне всегда нужно искать синтаксис bash-массива), чтобы сделать работу rsync и проверку оболочки счастливой?

0 ответов

Другие вопросы по тегам