首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么tr命令tr“\”\!"01234“不能工作?

为什么tr命令tr“\”\!"01234“不能工作?
EN

Unix & Linux用户
提问于 2020-02-09 07:32:16
回答 1查看 3.1K关注 0票数 8

在终端中,如果我将变量char定义为:

代码语言:javascript
复制
export char=\'\\\"\?\!

实际上,char是字符串。

代码语言:javascript
复制
'\"?!

然后使用tr命令将'\"?!替换为数字01234

代码语言:javascript
复制
tr "\'\\\"\?\!" "01234"

我想我会得到

代码语言:javascript
复制
01234

相反,我得到了

代码语言:javascript
复制
0\123

如果有人能向我解释发生了什么,我会非常感激的。

sed命令单独替换每个字符似乎避免了这个问题,但为什么呢?

EN

回答 1

Unix & Linux用户

发布于 2020-02-09 08:31:21

不仅仅是shell,而且tr本身也将反斜杠解释为一个特殊的转义字符,有关详细信息,请参阅其手册。因此,当您要替换反斜杠时,您需要确保tr收到文字\\ (两个反斜杠)。这可能是由char=...\\\\...在shell中完成的,这部分不需要进一步解释,因为您正确地理解了shell如何处理反斜杠。

在这里,这可能不方便,但在许多其他情况下很方便,并且允许字符集或NUL字节作为搜索或替换集的一部分(否则就不可能了)。例如,要将以NUL分隔的字符串转换为以换行符分隔的字符串,您可以执行类似于tr '\0' '\n' < /proc/1234/environ的操作,或者使用tr '[:upper:]' '[:lower:]'来小写字符串。如果tr没有转义字符,这是不可能的。

票数 17
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/566550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档