Bash - как сделать арифметическое c расширение в диапазоне скобок? - PullRequest
1 голос
/ 24 апреля 2020

Я хочу сделать это: for i in {1.."$((2**3))"}; do echo "$i"; done

Но это выдаст {1..8}, который я хочу выполнить, а не вывод. Как?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Вы можете использовать seq вместо фигурных скобок:

for i in $(seq 1 $((2**3))); do echo "$i"; done
1 голос
/ 24 апреля 2020

Вы не можете делать так в bash, расширение скобки происходит раньше, чем переменная. c -стиль для l oop может быть альтернативой.

for ((i = 1; i <= 2**3; i++)); do printf '%d ' "$i"; done

... Или, если вы действительно хотите сделать расширение скобки, используйте eval, который не рекомендуется использовать, но это это единственный способ ...

eval echo {1..$((2**3))}
  • См. местное руководство bash для заказа расширения PAGER='less +/^EXPANSION' man bash и онлайн-руководство (спасибо @Freddy) https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html

  • См. eval в местном bash руководстве PAGER='less +/^[[:blank:]]*eval\ ' man bash

...