Відповіді:
Це лише питання "тому, що я хочу знати", чи існує справжній випадок використання? Ми могли б пройти гімнастику, щоб виконати це:
$ 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 значень.