When using tr -t command, string1 should be truncated to the length of string2, right?
Não foi isso que aconteceu?
abcdefghijklmn
123
Observe quais letras são e não são trocadas:
the 3ell1r is the s1fest pl13e
'a' e 'c', mas não e, f, i ou l, que estavam no conjunto original (não truncado) 1.
Sem o -t
, você recebe:
t33 33331r 3s t33 s133st p3133
Isso ocorre porque (de man tr
), "SET2 é estendido para comprimento de SET1 repetindo seu último caractere conforme necessário." Sem o -t
para truncar o conjunto 1, o que você tem é o mesmo que
tr abcdefhijklmn 1233333333333
Vamos considerar outro exemplo, mas usando o mesmo "a adega é o lugar mais seguro" como entrada.
> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place
Isso ocorre porque o segundo conjunto é automaticamente estendido para cobrir todo o primeiro conjunto. -t
essencialmente faz o oposto disso ; trunca o primeiro conjunto em vez de estender o segundo:
> echo $input | tr -t is X
the cellar Xs the safest place
Qual é o mesmo que:
> echo $input | tr i X
the cellar Xs the safest place
Desde que o 's' foi truncado desde o primeiro conjunto. Se os dois conjuntos tiverem o mesmo tamanho, usar -t
não fará diferença:
> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place