IMHO, isso pode parcialmente ter a ver com echo
, mas há outra parte do problema tomando influência. Então a situação ideal seria se sua distro disponibilizasse uma versão GNU recente de tr
(como na minha), porque, como você pode ver abaixo, há uma peculiaridade clara em sua sintaxe e no GNU tr
reclama para mostrar onde você tem que aplicar a "correção".
original:
$ stringen() { cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-Z-A-z-0-9' | head -c "$1" ; }
$ stringen 18
tr: range-endpoints of 'a-Z' are in reverse collating sequence order
Ouch! Aqui está uma versão alternativa de sua linha que a corrige (pelo menos na minha distro com GNU tr
, ele fez o truque):
"fixo":
$ stringen () { cat /dev/urandom | env LC_CTYPE=C tr -cd 'A-Za-z0-9' | head -c "$1" ; }
$ stringen 18
V068BrYGKIICyLI4QB
$
Conclusão: é melhor não misturar conjuntos com tr
, mas ao combinar conjuntos / intervalos, sempre certifique-se de manter letras grandes em letras grandes e letras minúsculas em minúsculas.
No entanto : Com um não-GNU tr
, o problema com a nova linha ausente ainda pode persistir. Mas com um GNU, minha linha corrigida não fará mais nenhum truque de nova linha.