Bei Verwendung tr -t
des Befehls string1
sollte auf die Länge von gekürzt werden string2
, richtig?
tr -t abcdefghijklmn 123 # abc... = string1, 123 = string2
the cellar is the safest place # actual input
the 3ell1r is the s1fest pl13e # actual output
„abschneiden“ ist ein anderes Wort für „verkürzen“, oder? tr
bedeutet laut Muster, die -t
Option vollständig zu ignorieren. Wenn ich die automatische Vervollständigung auf --truncate-set1
[um sicherzustellen, dass ich die richtige Option verwende] ausführe, wird dieselbe Ausgabe erzeugt.
Frage: was mache ich hier falsch?
Ich arbeite in BASH, einer Debian-basierten Distribution.
AKTUALISIEREN
Bitte beachten Sie, dass dies eine Kopie eines Kommentars ist, den ich unten abgegeben habe
Ich dachte tr -t
, es bedeutet:Kürzen Sie string1 auf die Länge von string2. Ich sehe, dass das a
mit übersetzt wird 1
, das b
würde mit übersetzt werden 2
und das c
wird mit übersetzt 3
. Das hat nichts mit Kürzen zu tun. „Abkürzen“ scheint etwas anderes zu bedeuten, als ich dachte. [Ich bin kein Muttersprachler]
Antwort1
Bei Verwendung des Befehls tr -t sollte Zeichenfolge1 auf die Länge von Zeichenfolge2 gekürzt werden, richtig?
Ist das nicht passiert?
abcdefghijklmn
123
Beachten Sie, welche Buchstaben vertauscht sind und welche nicht:
the 3ell1r is the s1fest pl13e
„a“ und „c“, aber nicht e, f, i oder l, die im ursprünglichen (nicht gekürzten) Satz 1 enthalten waren.
Ohne -t
erhalten Sie:
t33 33331r 3s t33 s133st p3133
Dies liegt daran, dass (von man tr
),„SET2 wird auf die Länge von SET1 verlängertdurch Wiederholung des letzten Zeichenswie nötig." Ohne das -t
Kürzen von Satz 1 haben Sie also das Gleiche wie
tr abcdefhijklmn 1233333333333
Betrachten wir ein weiteres Beispiel, verwenden aber als Eingabe denselben Wert wie zuvor: „Der Keller ist der sicherste Ort“.
> input="the cellar is the safest place"
> echo $input | tr is X
the cellar XX the XafeXt place
-t
Dies liegt daran , dass der 2. Satz automatisch erweitert wird, um den gesamten ersten Satz abzudecken. tut das Gegenteil davon; es kürzt den ersten Satz, anstatt den zweiten zu erweitern:
> echo $input | tr -t is X
the cellar Xs the safest place
Was dasselbe ist wie:
> echo $input | tr i X
the cellar Xs the safest place
Da das „s“ aus dem ersten Satz abgeschnitten wurde. Wenn die beiden Sätze gleich lang wären, würde die Verwendung -t
keinen Unterschied machen:
> echo $input | tr is XY
the cellar XY the YafeYt place
> echo $input | tr -t is XY
the cellar XY the YafeYt place