开发者社区> 问答> 正文

tr意外输出[关闭]

我对此感到惊讶:

$ echo "§" | tr '§' 'a'
aa

我期待一个单身a。

为什么是这样?

展开
收起
祖安文状元 2020-01-05 18:53:21 236 0
1 条回答
写回答
取消 提交回答
  • tr(至少是GNU实现)不能正确处理多字节字符。看到这个答案https://unix.stackexchange.com/a/228570/330217

    显然§是您的语言环境中的两个字节的字符,因此您的第一组字符'§'包含两个字节。第二组'a'扩展到第一组的长度,因此有效地执行了命令

    tr '§' 'a'
    
    

    表现像

    tr '<1st byte of §><2nd byte of §>' 'aa'
    
    

    相似

    echo foobar | tr 'abc' 'x'
    
    

    作为一种变通方法,您可以使用sed来代替tr。

    $ echo "§"|sed 's/§/a/g'
    a
    
    2020-01-05 18:53:38
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载