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

Linux tr命令异常:自定义字符集的密码生成器出现意外字符

为什么我的tr命令生成的密码里出现了意外的,和.字符?

你遇到的问题根源在于tr命令对字符集中-的特殊解析规则——它把你写的+-/~误判成了一个ASCII字符范围,从而意外包含了,和.。

咱们来拆解一下tr是怎么处理你的参数'[:alnum:]@#%+-/~'的:

  • 首先,[:alnum:]会被识别为字母数字字符类,这部分是正常的;
  • 接下来的@#%会被当成普通单个字符,没问题;
  • 关键问题出在+-/~这里:tr规定,只要-不在字符集的开头或结尾,也不在字符类内部,就会被用作字符范围分隔符。你写的+-/~里,-夹在+和/之间,tr就会把它解析成「从+到/的所有ASCII字符」。

查一下ASCII表就知道,+的编码是43,/是47,这个范围里包含的字符是:+(43)、,(44)、-(45)、.(46)、/(47)——这就是,和.出现在密码里的原因!

解决办法

要让tr把-当成普通字符,只需要把它放到字符集的开头或结尾就行。比如把你的字符集改成:

pass 20 '[:alnum:]@#%+/-~'

或者更规范的写法(用[]明确包裹字符类,同时把-放在末尾):

pass 20 '[[:alnum:]]@#%+/~-'

这样修改后,tr就只会保留你指定的字母数字、@、#、%、+、/、~、-这些字符,不会再出现意外的,和.了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:21:37