"tr A-Z C-ZA-B" 和 "tr ..A-Z A-ZA-Z" 相等吗?

Are "tr A-Z C-ZA-B" and "tr ..A-Z A-ZA-Z" equal?

如果我比较以下两个命令:

$ echo "HELLO" | tr A-Z C-ZA-B
$ echo "HELLO" | tr ..A-Z A-ZA-Z

他们俩 return JGNNQ.

为什么 tr 会这样,我会得到相同的结果吗? <点> 是什么意思?

本质上,tr 所做的就是用 SET2 的字符替换 SET1 的字符。想象一下SET1="abcdef"SET2="123654",则做出如下翻译:

a->1    b->2   c->3
d->6    e->5   f->4

在您的第一个示例中,您将 26 个字符 A-Z 翻译成 C-ZAB,这意味着:

SET1=ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2=CDEFGHIJKLMNOPQRSTUVWXYZAB

如您所见,偏移量为 2

第二种情况同理

SET1=..ABCDEFGHIJKLMNOPQRSTUVWXYZ
SET2=ABCDEFGHIJKLMNOPQRSTUVWXYZAB

第二组被截断以匹配第一组,所以最终你得到了完全相同的字母翻译,但是,你会看到 的不同。

$ echo "HELLO. IS ANYBODY OUT THERE." | tr A-Z C-ZA-B
JGNNQ. KU CPADQFA QWV VJGTG.
$ echo "HELLO. IS ANYBODY OUT THERE." | tr ..A-Z A-ZA-Z
JGNNQB KU CPADQFA QWV VJGTGB

请注意细微差别,在第二种情况下,您还将 翻译成字母 B