如何结合变量与函数使用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
相关产品推荐
相关产品推荐

