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

编写Bash脚本:根据指定长度从字典中输出随机单词

实现指定长度的随机字典单词脚本

问题解决核心:正确给awk传递参数

你之前用awk失败的原因是没掌握正确的传参方式,awk可以通过-v选项直接把shell变量传入,这样就能在awk脚本里使用命令行参数了。

完整脚本实现

#!/bin/bash

# 校验参数数量
if [ $# -ne 1 ]; then
    echo "用法: $0 <单词长度>"
    exit 1
fi

# 校验参数是否为正整数
if ! [[ "$1" =~ ^[1-9][0-9]*$ ]]; then
    echo "错误: 请传入正整数作为单词长度"
    exit 1
fi

# 系统默认字典文件路径(多数Linux发行版通用)
DICT="/usr/share/dict/words"

# 检查字典文件是否存在
if [ ! -f "$DICT" ]; then
    echo "错误: 未找到字典文件,请修改DICT变量指定正确路径"
    exit 1
fi

# 筛选指定长度单词并随机输出一个
awk -v target_len="$1" 'length($0) == target_len' "$DICT" | shuf -n 1

关键部分说明

  • awk传参:-v target_len="$1"把命令行第一个参数赋值给awk内部的target_len变量,之后在awk脚本里用length($0) == target_len判断每行单词的长度是否符合要求。
  • 随机选择:用shuf -n 1把筛选后的单词列表随机打乱,取第一行结果,实现随机输出。
  • 参数校验:避免用户不传参、传非正整数的情况,同时检查字典文件是否存在,提升脚本健壮性。

替代方案(不用awk)

如果不想用awk,也可以用grep正则匹配指定长度的单词:

grep "^.\{$1\}$" "$DICT" | shuf -n 1

这里^.\{$1\}$表示匹配长度恰好为$1的行(^是行首,$是行尾,.\{N\}表示任意字符重复N次)。

内容的提问来源于stack exchange,提问作者coder for life

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:40:28