tr を使用してテキストを繰り返し文字に置き換えます。

tr を使用してテキストを繰り返し文字に置き換えます。

ファイルで変数の名前変更を試してみましたが、tr変数に重複した文字があるかどうかわからない動作がいくつか見つかりました。

たとえば、

echo "aab" | tr 'aab' 'xyz'

xyzを期待すると、「yyz」という結果が出ます。

ここで何が起こっているのかを説明できる人はいますか?

必要な結果を得るために他のコマンドを使用できることを知っていますが、この状況が何であるかを理解したいとsed思います。trマニュアルページを見てみましたが、なぜこれが起こるのかについての別の説明が見つかりませんでした。ありがとう

答え1

tr文字列ではなく単一文字を処理します。対応するパラメータは、1対1のマッピングを形成する文字セットです。

tr aab xyz

aに変えるxa~に変えるyb~に変えるz」という意味です。次の 2 つのグループで 1 つ上のレベルを確認すると役に立ちます。

tr aab \
   xyz

2番目のグループが最初のグループより短い場合は、最後の文字を繰り返し(デフ​​ォルトで)展開します。これらのコレクションは順次適用されず、順次読み取られるため、上記aの「→」置換は以前に定義された「→ ya置換を削除します。x

関連情報