Эффективное приложение для управления задачами / проектами / задачами [закрыто]

] Руководство Bash говорит, что:

SIMPLE COMMAND EXPANSION
When a simple command is executed, the shell performs the following
expansions, assignments, and redirections, from left to right.
[...]
4. The  text  after the = in each variable assignment undergoes tilde
   expansion, parameter expansion, command substitution, arithmetic
   expansion, and quote removal before being assigned to the variable.

Раскрытие скобок отсутствует в списке, поэтому оно не выполняется для присваивания v = {a, b} - {1,2} . Как упоминал @Wildcard, простое расширение до v = a-1 v = b-1 ... в любом случае было бы бессмысленным.

Кроме того, при выполнении echo $ v применяется следующее:

EXPANSION
Expansion is performed on the command line after it has been split
into words. [...]

The order of expansions is: brace expansion; tilde expansion, 
parameter and variable expansion, arithmetic expansion, and command
substitution (done in a left-to-right fashion); word splitting; and
pathname expansion.

Раскрытие фигурных скобок происходит до раскрытия переменных, поэтому фигурные скобки, присвоенные $ v , не раскрываются.

Но вы можете делать такие вещи:

$ var_this=foo var_that=bar
$ echo $var_{this,that}
foo bar

Расширяя его с помощью $ (echo ...) должен работать, если у вас нет пробелов в расширяемой строке, и, следовательно, не возникнет проблем с разделением слов. Лучшим способом может быть использование переменной массива, если это возможно.

например. сохраните расширение в массив и выполните некоторую команду с расширенными значениями:

$ v=( {a,b}-{1,2} )
$ some_command "${v[@]}"

5
26.01.2019, 18:05
0 ответов

Теги

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