You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash的for循环中执行计算以动态调整x坐标

Bash循环生成递增x坐标标签的解决方案

我写了一段Bash代码,通过for循环生成带x坐标的<text>标签,但目前x值固定为30,无法实现每次循环递增20的需求。

原代码如下:

for ((i=1 ; i < $words2 + 1 ; i++)) ; 
do
  printf '%s %s %s\n' '<text x="30" y="10">'$i'</text>' | sed 's/ *$//' 
done

当前输出(x值固定):

<text x="30" y="10">1</text>
<text x="30" y="10">2</text>
<text x="30" y="10">3</text>

预期输出(x值从30开始每次递增20):

<text x="30" y="10">1</text>
<text x="50" y="10">2</text>
<text x="70" y="10">3</text>

解决方案

只需要在循环内动态计算x的取值即可,核心是用公式30 + (i-1)*20生成递增的x值。修改后的代码如下:

for ((i=1 ; i < $words2 + 1 ; i++)) ; 
do
  x=$((30 + (i-1)*20))
  printf '<text x="%d" y="10">%d</text>\n' "$x" "$i"
done

说明:

  1. 用$((...))进行算术运算,计算每次循环对应的x值:第一次循环i=1时,x=30+0=30;i=2时x=30+20=50,以此类推。
  2. 优化了printf写法,直接用格式占位符%d插入数值,避免字符串拼接和sed去尾空格的操作,更简洁高效。

如果需要保留原代码的sed处理逻辑,也可以写成:

for ((i=1 ; i < $words2 + 1 ; i++)) ; 
do
  x=$((30 + (i-1)*20))
  printf '%s %s %s\n' "<text x=\"$x\" y=\"10\">" "$i" '</text>' | sed 's/ *$//'
done

内容的提问来源于stack exchange,提问作者GJO2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:30:57