【问题标题】:bash for loop with range defined not working定义范围的bash for循环不起作用
【发布时间】:2019-10-27 20:56:19
【问题描述】:

当我为 for 循环定义范围时,它似乎不起作用。 如果我定义数字,它确实有效。

这不起作用:

range="10 {4..28..8}"
for i in $range; do
echo $i
done

输出:

10
{4..28..8}

这行得通:

for i in 10 {4..28..8}; do
echo $i
done

输出:

10
4
12
20
28

【问题讨论】:

  • 一些杂牌:range="10 $(echo {4..28..8})"range="10 $(seq 4 8 28)"

标签: linux bash loops for-loop


【解决方案1】:

docs 表示大括号扩展发生在参数扩展之前。当您定义 range="10 {4..28..8}" 时,不会发生大括号扩展,因为它被引用了。当您执行 for i in $range 时,由于优先级,它不会像您预期的那样工作。

【讨论】:

  • 请注意,即使没有引号,大括号扩展也不会出现在普通赋值的 RHS 上。 range=10\ {4..28..8} 仍将产生文字字符串 10 {4..28..8}
【解决方案2】:

使用数组。

range=(10 {4..28..8})
for i in "${range[@]}"; do
  echo "$i"
done

(大括号表达式是在创建数组时展开的,而不是在执行for循环时展开的。但实际上并没有太大区别。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2019-04-10
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2019-07-08
    相关资源
    最近更新 更多