それでは、@ Prvt_Yadvのおかげでドットを理解できました。最初の質問の答えは次のとおりです。
2番目のtr
コマンドの背後にある魔法は何ですか?
13個のドットは、2番目のセットの最初の13文字に単純にマッピングされています。そう
tr .............A-Z A-ZA-Z
次のセットを生成します。
SET1 -> .............ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
入力にドットが含まれていない場合、これらの置換を使用しないため、初期シーケンスを破棄できます。次に、セットは次のようになります。
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
しかし、最初のセットにはすでに26文字すべてが含まれており、set2には末尾の文字が繰り返されているため、それらも破棄され、最終的には
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> NOPQRSTUVXWYZABCDEFGHIJKLM
これはrot13の置換であり、最初のコマンドと同じです(ここで小文字を処理しないことを除く)。同じロジックを質問のタイトルに適用できます。
tr ...A-Z A-ZA-Z <<< “JVPQBOV”
セットを生成します:
SET1 -> ...ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZ
初期シーケンスと末尾の繰り返し文字を破棄すると、次のようになります。
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZ
SET2 -> DEFGHIJKLMNOPQRSTUVXWYZABC
rot3の置換です。
2番目の質問:
最初のコマンドと同様に、2番目のコマンドを小文字と大文字の両方で機能させるにはどうすればよいですか?
これを機能させるには、次のように、最初に希望の数のドットを配置し、腐敗と26ドットを上位シーケンスと下位シーケンスに一致させます。
tr ........A-Z..........................a-z A-ZA-Za-za-z
これにより、鈍感なrot8が正常に作成されます。これがなぜ機能するかを視覚化するために、セットを見てみましょう。
SET1 -> ........ABCDEFGHIJKLMNOPQRSTUVXWYZ..........................abcdefghijklmnopqrstuvxwyz
SET2 -> ABCDEFGHIJKLMNOPQRSTUVXWYZABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyzabcdefghijklmnopqrstuvxwyz
ドットマッピングと末尾の文字を除く:
SET1 -> ABCDEFGHIJKLMNOPQRSTUVXWYZabcdefghijklmnopqrstuvxwyz
SET2 -> IJKLMNOPQRSTUVXWYZABCDEFGHijklmnopqrstuvxwyzabcdefgh
今では大文字と小文字の両方で動作します:)
動作させるもう1つの方法はtr
、次の2つのコマンドを使用することです。
tr .............A-Z A-ZA-Z <<< "ABJ V hqrefgnaq" | tr .............a-z a-za-z
ドット置換を使用する場合の警告は、@ iruvarによって与えられました。このコマンドは、入力文字列にドットがある場合、期待どおりに機能しません。これは、ドットが他の文字にマップされており、置換を実行tr
すると、入力ドットが最後にマップされた文字に変更されるためです。ただし、実際にはドット以外の文字を使用できます。そのため、tr
コマンドでドットを使用することが問題になる場合は、@
代わりに使用できます。これは同じようにうまく機能します:
tr @@@@@@@@@@@@@A-Z A-ZA-Z <<< "GUNAX LBH NYY..."