ファイルで変数の名前変更を試してみましたが、tr
変数に重複した文字があるかどうかわからない動作がいくつか見つかりました。
たとえば、
echo "aab" | tr 'aab' 'xyz'
xyzを期待すると、「yyz」という結果が出ます。
ここで何が起こっているのかを説明できる人はいますか?
必要な結果を得るために他のコマンドを使用できることを知っていますが、この状況が何であるかを理解したいとsed
思います。tr
マニュアルページを見てみましたが、なぜこれが起こるのかについての別の説明が見つかりませんでした。ありがとう
答え1
tr
文字列ではなく単一文字を処理します。対応するパラメータは、1対1のマッピングを形成する文字セットです。
tr aab xyz
「a
に変えるx
、a
~に変えるy
、b
~に変えるz
」という意味です。次の 2 つのグループで 1 つ上のレベルを確認すると役に立ちます。
tr aab \
xyz
2番目のグループが最初のグループより短い場合は、最後の文字を繰り返し(デフォルトで)展開します。これらのコレクションは順次適用されず、順次読み取られるため、上記a
の「→」置換は以前に定義された「→ y
」a
置換を削除します。x