"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
。
如果我比较以下两个命令:
$ 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
。