Я хочу сделать это: for i in {1.."$((2**3))"}; do echo "$i"; done
for i in {1.."$((2**3))"}; do echo "$i"; done
Но это выдаст {1..8}, который я хочу выполнить, а не вывод. Как?
{1..8}
Вы можете использовать seq вместо фигурных скобок:
seq
for i in $(seq 1 $((2**3))); do echo "$i"; done
Вы не можете делать так в bash, расширение скобки происходит раньше, чем переменная. c -стиль для l oop может быть альтернативой.
for ((i = 1; i <= 2**3; i++)); do printf '%d ' "$i"; done
... Или, если вы действительно хотите сделать расширение скобки, используйте eval, который не рекомендуется использовать, но это это единственный способ ...
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
PAGER='less +/^EXPANSION' man bash
@Freddy
См. eval в местном bash руководстве PAGER='less +/^[[:blank:]]*eval\ ' man bash
PAGER='less +/^[[:blank:]]*eval\ ' man bash