为什么带变量的大括号扩展不能按预期工作?

为什么带变量的大括号扩展不能按预期工作?

我想在括号中设置一个变量(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"
}

相关内容