如何更优雅地生成指定长度的双单词随机序列?
更简洁的双单词随机序列生成Shell实现
需求是生成由两个指定单词(如act和apt)组成、长度为指定值(如12)的空格分隔随机序列,示例输出:act apt act act apt act act apt apt apt apt act
以下是几种更优雅简洁的实现方式:
利用
shuf命令(最简洁)shuf专门用于随机打乱/选取内容,一行命令就能完成:shuf -n 12 -e act apt | tr '\n' ' ' && echo解释:
-n 12指定选取12次,-e后跟要选择的单词;tr '\n' ' '将每行一个的输出转为空格分隔;最后echo补全换行。简化原命令的随机判断逻辑
原命令的随机部分$(($(($RANDOM%10))%2))冗余,直接$((RANDOM%2))就能生成0/1的随机数,简化后:for i in {1..12}; do printf "%s " $([ $((RANDOM%2)) -eq 1 ] && echo act || echo apt); done; echo若你的环境支持
repeat命令,也可以这么写:repeat 12 { echo $([ $((RANDOM%2)) -eq 1 ] && echo act || echo apt); } | tr '\n' ' ' && echo基于数组的可扩展实现
将单词存入数组,通过随机索引选取,后续要增加单词只需修改数组:words=("act" "apt") for i in {1..12}; do printf "%s " "${words[$((RANDOM%${#words[@]}))]}"; done; echo解释:
${#words[@]}获取数组长度,保证索引不会越界,天生支持多单词扩展。
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

