Dimitris Mintis Asked: 2020-02-01 04:08:30 +0800 CST2020-02-01 04:08:30 +0800 CST 2020-02-01 04:08:30 +0800 CST 为什么带有变量的大括号扩展不能按预期工作?[复制] 772 我想在括号中设置一个变量(x = 100),例如 x=100 for i in {0.."$x"..50} ;do echo $i done 我的愿望输出应该是 0 50 100 虽然我得到了输出 {0..100..50} bash variable 2 个回答 Voted Stéphane Chazelas 2020-02-01T04:11:42+08:002020-02-01T04:11:42+08:00 该语法适用于 zsh (它来自哪里)或 ksh93 或yash -o braceexpand,但不适用于bash不能在{x..y}. 但是在这里,无论如何最好使用 ksh93 样式的for ((...))循环: x=100 for ((i = 0; i <= x; i += 50)) { printf '%s\n' "$i" } Best Answer Inian 2020-02-01T04:12:38+08:002020-02-01T04:12:38+08:00 这在bash. 如果您在 中看到扩展顺序bash,则变量扩展发生在外壳扩展大括号的时间之后{0..50}。因此,在大括号展开时,shell 将结构视为{0..$x..50}无效的展开结构。 您需要另一种方法,最好的方法是算术上下文中的for循环。bash for ((i=0; i<=100; i+=50)); do printf "%d\n" "$i" done
该语法适用于 zsh (它来自哪里)或 ksh93 或
yash -o braceexpand
,但不适用于bash
不能在{x..y}
. 但是在这里,无论如何最好使用 ksh93 样式的for ((...))
循环:这在
bash
. 如果您在 中看到扩展顺序bash
,则变量扩展发生在外壳扩展大括号的时间之后{0..50}
。因此,在大括号展开时,shell 将结构视为{0..$x..50}
无效的展开结构。您需要另一种方法,最好的方法是算术上下文中的
for
循环。bash