我想这样做:
for i in {1.."$((2**3))"}; do echo "$i"; done
但是这会输出{1..8}
,我要执行,而不是输出。
怎么做?
答案 0 :(得分:2)
您可以使用seq
代替范围括号:
for i in $(seq 1 $((2**3))); do echo "$i"; done
答案 1 :(得分:1)
您不能像在bash中那样进行操作,大括号扩展发生在变量之前。 可以使用c样式的for循环。
for ((i = 1; i <= 2**3; i++)); do printf '%d ' "$i"; done
...或者,如果您真的想进行括号扩展,请使用eval
,不建议使用,但这是唯一的方法...
eval echo {1..$((2**3))}
有关扩展顺序PAGER='less +/^EXPANSION' man bash
和在线手册(感谢@Freddy
)https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html
请参见本地bash手册eval
PAGER='less +/^[[:blank:]]*eval\ ' man bash