我想在括号中设置一个变量(x=100),例如
x=100
for i in {0.."$x"..50} ;do
echo $i
done
i 的期望输出应该是
0
50
100
虽然我得到作为输出
{0..100..50}
答案1
这在bash
.如果您看到扩展顺序为bash
变量展开发生的时间晚于 shell 展开大括号的时间{0..50}
。因此,在大括号扩展时,shell 会将构造视为{0..$x..50}
无效的扩展构造。
您需要一种替代方法,最好的方法是算术上下文for
中的循环。bash
for ((i=0; i<=100; i+=50)); do
printf "%d\n" "$i"
done
答案2
该语法可以在 zsh(它的来源)或 ksh93 或 中使用yash -o braceexpand
,但不适用于bash
不能在 中使用扩展的地方{x..y}
。但在这里,无论如何使用 ksh93 风格的循环会更好for ((...))
:
x=100
for ((i = 0; i <= x; i += 50)) {
printf '%s\n' "$i"
}