Список аргументов только в одной переменной в bash

Mint фактически использует репозитории Ubuntu для большинства пакетов, которые вы установите. Таким образом, за исключением тех вещей, которые Mint специально переопределяет в своем собственном репозитории, Mint - это Ubuntu.

Вы можете узнать, какое программное обеспечение предоставляет сам Mint здесь: http://packages.linuxmint.com/list.php?release=Rosa . Как вы можете видеть, большинство этих пакетов связаны со средой отображения.

0
20.03.2018, 17:11
1 ответ

Вместо того, чтобы составлять список имен файлов и шаблонов в виде одной строки, вы можете сделать его массивом, начинающимся с:

list=(file1 dir1 "**.data" "**.source")

, а затем цикл по элементам:

args=()
for item in "${list[@]}" ; do
    args+=(--filter="+ $item")
done

Это создаст аргументы, подобные --filter=+ file1, без каких-либо кавычек внутри строки аргумента. (Вы не хотите, чтобы кавычки шли к rsync. Он будет жаловаться на правило фильтрации, в котором они есть, например.rsync "--filter='+ foo'"...)

И когда вы передаете массив команде, обязательно используйте "${args[@]}"для передачи элементов массива в виде отдельных строк:

rsync "${args[@]}" "$srcdir" "$destdir"

Вместо "--filter=+ foo", я думаю, вы могли бы просто использовать --include=foo. Это убрало бы один проблемный пробел из аргументов (, но ничего не сказало бы о пробелах или подстановках в шаблонах имен файлов ).


В вашем случае вы использовали set -fдля отключения подстановки, for i in $listдолжно работать, но, поскольку вам нужен массив, вы можете использовать его для начала.

Что еще более важно, присваивание args=${arr[*]}выравнивает массив до одной строки. Теперь пробелы внутри аргументов и пробелы между аргументами равны, есть только --filter=+ file1 --filter=+ dir1..., и оболочка не может различать разные виды пробелов. Расширение без кавычек $argsбудет разбито на все без исключения пробелы (, которые показывает вывод set -x, если вы хотите проанализировать беспорядок кавычек.)

По сути, все выгоды от использования массива были поставлены под сомнение при выполнении этого задания.

4
28.01.2020, 02:18

Теги

Похожие вопросы