# rand 一个快速、可组合的命令行随机数生成器,支持 6 种概率分布,原生管道语法。 ## 安装 ```bash # 源码运行 bun install bun run index.ts # 构建独立二进制 bun run build # → dist/rand sudo cp dist/rand /usr/local/bin/ ``` ## 快速开始 ```bash rand # 0–100 的随机整数 rand 50 # 0–50 rand 10 20 # 10–20 rand -c 5 # 生成 5 个数 rand -f2 # 保留 2 位小数 ``` ## 选项 | 选项 | 说明 | |------|------| | `-c, --count ` | 生成个数,默认 1 | | `-f[N]` | 小数位数:`-f` 默认 2 位,`-f1` = 1 位,`-f3` = 3 位 | | `--float [N]` | `-f` 的长形式 | | `-d, --dist ` | 概率分布,默认 `uniform` | | `-h, --help` | 帮助信息 | | `--` | 之后所有参数视为位置参数(用于负数) | ## 概率分布 | 分布 | 命令 | 参数 | 默认值 | |------|------|------|--------| | uniform | `rand` | `[min] [max]` | 0, 100 | | normal | `rand -d normal` | `[μ] [σ]` | 0, 1 | | binomial | `rand -d binomial` | `[n] [p]` | 10, 0.5 | | poisson | `rand -d poisson` | `[λ]` | 1 | | exponential | `rand -d exponential` | `[λ]` | 1 | | hypergeometric | `rand -d hypergeometric` | `[N] [K] [n]` | 100, 50, 10 | ### 采样算法 | 分布 | 算法 | |------|------| | normal | Box-Muller 变换 | | binomial | Bernoulli 试验求和 | | poisson | Knuth 算法 | | exponential | 逆 CDF 变换 | | hypergeometric | 不放回抽样模拟 | ## 管道 stdout 输出纯数据,stderr 输出诊断信息,天然支持管道组合: ```bash rand | xargs echo # 管道输出 echo 50 | rand # stdin 提供上限 echo "5 2" | rand -d normal -f1 # stdin 覆盖分布参数 rand -c 100 | sort -n | head -5 # 生成 100 个,取最小的 5 个 ``` ## 示例 ```bash # 正态分布:均值 100,标准差 15 rand -d normal 100 15 -f1 # 二项分布:20 次试验,成功概率 0.3,生成 5 个样本 rand -d binomial 20 0.3 -c 5 # 泊松分布:λ=3 rand -d poisson 3 # 指数分布:λ=0.5,保留 1 位小数 rand -d exponential 0.5 -f1 # 超几何分布:总体 100,成功 30,抽取 5 次 rand -d hypergeometric 100 30 5 # 负数范围(用 -- 分隔标志和参数) rand -- -10 -5 rand -d normal -- 0 -1 # stddev 必须 > 0,会报错 ``` ## 项目结构 ``` index.ts # 入口 src/ types.ts # 类型定义与默认值 help.ts # 帮助文本 args.ts # 参数解析与校验 stdin.ts # 管道输入读取 dist.ts # 分布采样器与调度 main.ts # 编排逻辑 ``` ## 构建 ```bash bun run build # → dist/rand(独立二进制,约 74MB) ``` 基于 [Bun](https://bun.com) 构建,零外部依赖。