... | zip zipf.zip -@ -i "*a*" "*b*"
Это два отдельных аргумента в кавычках - оболочка, таким образом, не расширяет ни один из шаблонов, и они принимаются zip
в качестве аргументов для -i
.
w='"*a*" "*b*"'
... | zip zipf.zip -@ -i $w
Поскольку вы не цитировали $w
, когда он раскрывается, он подлежит разделению на слова (что вы хотите) и расширению имени пути (чего вы не хотите, чтобы bash
делал). У вас нет файлов, соответствующих шаблонам в нем (возможно, из-за двойных кавычек, которые являются частью слов).
Вместо этого вы можете использовать массив для хранения шаблонов:
w=("*a*" "*b*")
... | zip zipf.zip -@ -i "${w[@]}"
(Кавычки здесь важны; они вызывают расширение массива в строки в кавычках, поэтому расширение имени пути не выполняется)