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

Korn Shell识别大写单词脚本异常:小写单词被误判为大写求助

脚本问题分析与解决方法

你的ksh脚本出现错误判定的原因是字符范围匹配受系统locale设置影响。

在默认的UTF-8 locale(如en_US.UTF-8)中,[A-Z]的匹配逻辑并非严格遵循ASCII字符顺序。这类locale的字符排序规则为aAbBcC...zZ,导致[A-Z]会匹配A到Z之间的所有字符——其中包含小写字母a到y,所以输入po时会被错误识别为符合大写规则。

两种可行的修复方案:

方案1:强制使用ASCII字符集匹配规则

在脚本开头设置LC_COLLATE=C,让字符范围匹配严格按照ASCII顺序执行:

#!/usr/bin/ksh
export LC_COLLATE=C
var=$1
if [[ ${var} == +([A-Z]) ]]
then
        echo "$var is UPPERCASE word"
else
        echo "$var is not UPPERCASE word"
fi

方案2:使用POSIX标准大写字符类

用[:upper:]替代[A-Z],该字符类不受locale影响,是更可靠的大写字符匹配方式:

#!/usr/bin/ksh
var=$1
if [[ ${var} == +([[:upper:]]) ]]
then
        echo "$var is UPPERCASE word"
else
        echo "$var is not UPPERCASE word"
fi

修改后执行./test.ksh po,会正确返回po is not UPPERCASE word。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:48:41