开发者社区 问答 正文

tr意外输出[关闭]

我对此感到惊讶:

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

我期待一个单身a。

为什么是这样?

展开
收起
祖安文状元 2020-01-05 18:53:21 250 分享 版权
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
    赞同 展开评论
问答分类:
问答地址: