You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下Bash脚本中tr命令无法保留撇号的问题排查

问题原因与解决方法

问题出在你脚本里的撇号不是普通ASCII单引号,而是「智能弯撇号」(’)——MacOS自带的文本编辑器(比如TextEdit)默认会把普通单引号自动替换成这种弯引号,但tr命令只识别ASCII编码的单引号('),所以脚本里的弯撇号不在你指定的保留列表里,自然会被移除。而终端里直接输入的是普通单引号,所以能正常生效。

解决步骤

  1. 替换撇号类型:把脚本里的弯撇号(’)换成键盘直接输入的普通ASCII单引号(')。
  2. 优化命令写法:推荐用现代的$(...)代替反引号做命令替换,可读性更强;同时给变量加双引号避免空格拆分问题:
    # 写法1:用双引号包裹tr的保留字符集合
    pword=$(echo "$word" | tr '[:upper:]' '[:lower:]' | tr -cd "[:alpha:]'")
    # 写法2:转义单引号(单引号包裹时需要转义)
    pword=$(echo "$word" | tr '[:upper:]' '[:lower:]' | tr -cd '[:alpha:]'\''')
    
  3. 更高效的写法(Bash 4.0+):利用Bash的参数展开直接转小写,不用调用echo和额外的tr进程:
    # 先转小写,再过滤字符
    pword=${word,,}
    pword=$(tr -cd "[:alpha:]'" <<< "$pword")
    # 或者合并成一步
    pword=$(tr '[:upper:]' '[:lower:]' -cd "[:alpha:]'" <<< "$word")
    

内容的提问来源于stack exchange,提问作者Anton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:47:34