Ответы:
Это просто вопрос «потому что я хочу знать», или есть реальный вариант его использования? Мы могли бы пройти некоторую гимнастику, чтобы сделать это:
$ eval echo\ {a,b,c}\;
a
b
c
Но я бы охотился на любого, кто вставлял такие запутывающие команды в наши системные скрипты.
Почему бы не пойти на ясность вместо этого:
$ for X in {a,b,c}; do echo $X; done
Вы могли бы даже пойти напролом, вставить пару новых строк и сделать небольшой отступ, чтобы вы всегда могли понять, что вы пытаетесь сделать.
for
работах для этого, но это еще более типирование: P
eval git branch -d \{ branch-a, branch-b }\;
Основываясь на выбранном ответе Марка Манна , я смог получить следующий пример, который прекрасно работает:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
Это показывает, что когда вы используете множественные вхождения фигурных скобок в пределах строки, оригинальный пример Марка напечатал бы каждый вариант отдельно. Вместо этого я хотел использовать его ответ для перемещения / переименования нескольких файлов. Для того, чтобы гарантировать , что выходной сигнал соответствует формату , который mv
обычно ожидает ( mv oldfilename newfilename
), я избегал второго вхождения расширения распорки, так что она не будет оценена , пока после того, как начальное eval
командование выполняется.
Поскольку вышеприведенный вывод выглядел, как и ожидалось, я смог выполнить следующую команду:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Большое спасибо Марку за его оригинальный ответ. Пожалуйста, проголосуйте за его ответ, если вам нравится, что его ответ позволил мне сделать :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
то лучше использовать краткую форму, чем перечислять все 27 значений.