Как произвести разделенные от запятой строки с помощью расширения фигурной скобки удара

Поместите свою всю команду, включая &, в круглых скобках:

 (быстрый) $ gvim 1 &
[3] 9584
 (быстрый) $ некоторая другая команда
[3] Done gvimBackground 1
 (быстрый) $ (gvim 1 &)
                                <– (тишина)
 (быстрый) $

17
26.03.2014, 22:28
6 ответов
[112435] Предположим, что элементы [112715] не содержат пробелов, вы можете перевести пробелы в запятые: что приводит к:

Вы также можете использовать диапазоны с символами:

Это особенно полезно, если вам нужен больший диапазон.[112442]

9
27.01.2020, 19:46
[112443] Похоже, что bash не использует $IFS для объединения сгенерированных слов. Другой способ - хранить сгенерированные слова в массиве, и тогда $IFS [112717]будет [112718]:

Я собираюсь использовать подоболочку, чтобы не изменять IFS оболочки: выберите одну из

, которая испускает строку с разделителями запятых в stdout. Если вы хотите перехватить ее:

13
27.01.2020, 19:46
[112429] Я уверен, что есть много способов сделать это. Вот один способ:

5
27.01.2020, 19:46

Вот решение только для bash.

(IN=$(echo a{b,c,d}); echo ${IN// /,})
# ab,ac,ad

Часть перед точкой с запятой присваивает ab ac ad переменной IN , а вторая часть использует поиск и замену для замены всех пробелов на запятые. // означает все совпадения, а не только первое.

Делайте все это в подоболочке (заключительные скобки), чтобы не загрязнять ваше пространство имен.

1
27.01.2020, 19:46

Стоит отметить, что во многих контекстах запятая в конце списка допустима. ЕСЛИ запятая после запятой допустима, самый простой способ обработки подстановки - printf:

some-command "$(printf %s, a{b,c,d} )"

(Где some-command - это команда, которая работает со списком, разделенным запятыми, и не заботится о запятой после запятой. )

На самом деле, даже если вам не нужна запятая в конце, вы можете использовать printf; вам просто нужно указать количество ожидаемых аргументов, что делает его более неуклюжим для очень длинных списков:

some-command "$(printf %s,%s,%s a{b,c,d} )"
1
27.01.2020, 19:46

Разверните элементы, как вы показали, а затем прокрутите их, добавив запятую ко всем итерациям, кроме первой:

for i in a{b,c,d}; do
  u="${u:+$u, }$i"
done
echo "$u"

Результат:

ab, ac, ad

См. Подстановка параметров bash .

2
27.01.2020, 19:46

Теги

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