11

Когда вы используете расширение скобки в Bash, что-то вроде

echo {a,b,c}

становится

echo a b c

Есть ли способ расширить его до 3 отдельных команд, по одной для каждого расширения, вместо этого?

Чтобы:

echo {a,b,c}

станет

echo a
echo b
echo c

3 ответа3

12

Это просто вопрос "потому что я хочу знать", или есть реальный вариант его использования? Мы могли бы пройти гимнастику, чтобы сделать это:

$ eval echo\ {a,b,c}\;
a
b
c

Но я бы охотился на любого, кто вставлял такие запутывающие команды в наши системные скрипты.

Почему бы не пойти на ясность вместо этого:

$ for X in {a,b,c}; do echo $X; done

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

3

Основываясь на выбранном ответе Марка Манна, я смог получить следующий пример, который прекрасно работает:

$ 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

Большое спасибо Марку за его оригинальный ответ. Пожалуйста, проголосуйте за его ответ, если вам нравится, что его ответ позволил мне сделать :-)

0
printf '%s\n'  echo{\ a,\ b,\ c}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .