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

如何结合变量与函数使用Brace Expansion实现字符重复?

用变量/函数结合大括号扩展实现字符重复的问题

现有可行实现(基于seq)

函数形式

# 使用seq的函数实现
num() { echo $(shuf -i 0-50 -n 1); }
repeat() { for i in $(seq 1 $(num)); do echo -n "$1"; done; }
repeat -

变量形式

# 使用seq的变量实现
num=$(echo $(shuf -i 0-50 -n 1))
repeat() { for i in $(seq 1 $num); do echo -n "$1"; done; }
repeat -

问题与失败尝试

我想知道:如何用大括号扩展结合变量或函数实现相同的字符重复效果?

尝试了以下写法,但执行后仅输出单个$1对应的字符,只有将$num或$(num)替换为固定数字时才能正常工作:

函数结合大括号扩展

# 尝试用函数结合大括号扩展(失败)
num() { echo $(shuf -i 0-50 -n 1); }
repeat() { for i in {1..$(num)}; do echo -n "$1"; done; }
repeat -

变量结合大括号扩展

# 尝试用变量结合大括号扩展(失败)
num=$(echo $(shuf -i 0-50 -n 1))
repeat() { for i in {1..$num}; do echo -n "$1"; done; }
repeat -

另外想问:将大括号扩展视为类似seq的序列/范围是否正确?

补充结论与替代方案

在Bash中,不使用特殊技巧的情况下,无法在大括号扩展中使用变量。最优方案是使用seq、C风格循环,或者切换到zsh:

C风格循环示例

# 函数形式的C风格循环
num() { echo 5; }
for((i=1; i<=$(num); i++)); do echo -n "$(num)"; done

# 变量形式的C风格循环
num=5
for((i=1; i<=num; i++)); do echo -n "$num"; done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:54:14