Linux tr命令无法正常工作

时间:2018-04-06 07:14:32

标签: linux bash ubuntu random passwords

我有这个密码生成器:

pass () {
    # Generates a random password
    local size="${1:-12}"
    local alphabet="$2"
    </dev/urandom tr -dc "$alphabet" | head -c$size ; echo ""
}

其工作原理如下:

» pass 20 '[:alnum:]'
DpEf8bMp7zfkvSoudItS

但失败如下:

» pass 20 '[:alnum:]@#%+-/~'
JSNweE,.EU+P.l5nqkzd

tr命令明确说:

  

删除所有不属于给定集合的字符

因此字符,.是意料之外的。

他们来自哪里?

1 个答案:

答案 0 :(得分:2)

您忽略了tr手册页的另一部分:

  

CHAR1-CHAR2

     

从CHAR1到CHAR2的所有字符按升序排列

因此,+-/部分将代表字符+,-./。 (man ascii在这里很有用)。

对于连字符,你可以逃脱它:

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

改为使用\055

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

或将其放在最后:

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