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

如何在Bash中遍历无限长字符串前缀并循环执行foo命令

问题描述

我要运行一段名为foo的代码,它接受两个参数:由0和1组成的字符串,以及一个整数。该字符串是无限循环字符串110011001100110011...的前缀,长度不超过50。要求对每个前缀,第二个参数取1到该前缀长度的所有值,通过Bash循环执行如下示例中的命令:

foo 1 1
foo 11 1
foo 11 2
foo 110 1
foo 110 2
foo 110 3
...

我能写出类似如下的双层循环:

for i in {1..10}; do for j in $(seq 1 $i); do foo $i $j; echo $i $j; done; done

但不知如何实现上述需求。

实现方案

思路

先构造出最长的目标循环字符串前缀(长度50的1100循环串),通过截取子串得到所有长度从1到50的前缀;再用双层循环,外层遍历每个前缀,内层遍历1到该前缀长度的整数,执行foo命令。

具体脚本

# 定义循环基本单元
base="1100"
# 生成足够长的循环字符串,截取前50个字符作为最长前缀
full_str=$(printf "%0.s$base" {1..15})
full_str=${full_str:0:50}

# 外层循环遍历所有前缀长度(1到50)
for len in $(seq 1 ${#full_str}); do
    # 获取当前长度的前缀
    prefix=${full_str:0:$len}
    # 内层循环遍历1到当前前缀长度的整数参数
    for j in $(seq 1 $len); do
        # 执行目标命令
        foo "$prefix" "$j"
        # 可选:打印命令用于调试,取消注释即可
        # echo "foo $prefix $j"
    done
done

关键说明

  • base="1100"是循环的核心单元,通过重复拼接生成足够长的字符串,再截取前50位满足最长前缀要求。
  • ${#full_str}获取字符串长度,确保外层循环覆盖所有可能的前缀长度。
  • prefix=${full_str:0:$len}截取前len个字符,得到对应长度的前缀。
  • 若最长前缀长度不是50,只需修改full_str=${full_str:0:50}中的数字为目标长度即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 16:22:14