【发布时间】:2023-10-26 14:35:01
【问题描述】:
我想检查以下条件,但它应该不区分大小写。 如果 [ "SPP" == $1 ] 无论如何我可以使用正则表达式来做到这一点。
【问题讨论】:
标签: shell if-statement ksh case-insensitive
我想检查以下条件,但它应该不区分大小写。 如果 [ "SPP" == $1 ] 无论如何我可以使用正则表达式来做到这一点。
【问题讨论】:
标签: shell if-statement ksh case-insensitive
您还可以执行以下操作:
#!/bin/bash
myParam=`echo "$1" | tr 'a-z' 'A-Z'`
if [ "SPP" == "$myParam" ]; then
echo "Is the same"
else
echo "It is not the same"
fi
此脚本会在进行任何字符串比较之前自动将用户输入转换为大写。通过这样做,您将不必使用正则表达式进行不区分大小写的字符串比较。
希望对你有帮助。
【讨论】:
迟到总比没有好...
如果是 ksh93,请使用 ~(i:...) 不区分大小写的通配子模式:
if [[ $1 == *~(i:spp)* ]]; then
: matched.
fi
对于 ksh88(也是 ksh 克隆),使用中间变量 typeset -u'd 强制大写:
typeset -u tocheck=$1
if [[ $tocheck == *SPP* ]]; then
: matched
fi
【讨论】:
你可以使用:
shopt -s nocasematch
用于 BASH 中不区分大小写的匹配。
或者,这也应该有效:
[[ "$1" == [sS][pP][pP] ]]
【讨论】:
shopt -s nocasematch?
[ [sS][pP][pP] == "$1" ]