Расширение фигурной скобки в кавычках

Я понимаю, что расширение фигурной скобки в Bash расширится до нескольких аргументов. У меня может быть он, расширяются до отдельного аргумента?

Существует ли чистое решение этого в Bash, не обращаясь к вложенному эху?

Фактическое поведение

command arg{1,2,3}

$1 = arg1
$2 = arg2
$3 = arg3

Желаемое поведение

$1 = arg1 arg2 arg3
$2 = 
$3 = 

Нерешение

command "arg{1,2,3}"

$1 = arg{1,2,3}
$2 = 
$3 = 

Потенциальное решение (немного взлома-y?)

command "$(echo arg{1,2,3})"

$1 = arg1 arg2 arg3
$2 = 
$3 = 
1
задан 3 February 2019 в 01:45

1 ответ

Расширение arg{1,2,3} кому: arg1 arg2 arg3 назван Расширением Фигурной скобки, разделение этого в три слова называют Word Splitting и вставкой выходной Замены Команды команды. man bash говорит:

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

В командной строке как

printf %s\\n {1..3}

Расширение фигурной скобки происходит сначала и делает его

printf %s\\n 1 2 3

где 1, 2 и 3 отдельные слова благодаря Word Splitting. Нет ничего, что можно сделать для изменения этого порядка – когда Вы испытали, заключение в кавычки его не только предотвращает Word Splitting, но Расширение Фигурной скобки также. Можно однако использовать Замену Команды для получения Расширения Фигурной скобки даже в двойных кавычках:

Если [команда] замена появляется в двойных кавычках, разделение слова и расширение пути не выполняются на результатах.

В

printf %s\\n "$(echo {1..3})"

внутренняя из кавычек расширена сначала

printf %s\\n "$(echo 1 2 3)"
printf %s\\n "1 2 3"

и поскольку результат заключается в кавычки, он не подвергается Word Splitting:

$ printf %s\\n {1..3} "{1..3}" "$(echo {1..3})" # prints one argument per line
1
2
3
{1..3}
1 2 3

Это - действительно не только самый простой способ сделать это, но также и чистое bash решение, как echo a bash встроенный.

3
ответ дан 3 December 2019 в 07:22

Другие вопросы по тегам:

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