比较两个字符串的命令

Gim*_*ray 7 command-line bash scripts

我需要比较两个字符串并忽略内容的大小写。如果 [ $first != $second ]。我可以添加到此命令的任何内容,以便比较忽略大小写。

ste*_*ver 24

在 bash 中,您可以轻松地执行大小写转换,例如 if var="vAlUe"then

$ echo "${var^^}"
VALUE
Run Code Online (Sandbox Code Playgroud)

尽管

$ echo "${var,,}"
value
Run Code Online (Sandbox Code Playgroud)

您可以使用它通过将两个参数转换为相同的大小写来使比较不区分大小写,即

if [ "${first,,}" == "${second,,}" ]; then
  echo "equal"
fi
Run Code Online (Sandbox Code Playgroud)

或者

if [ "${first^^}" == "${second^^}" ]; then
  echo "equal"
fi
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用 bashnocasematch选项(感谢@Tshilidzi_Mudau),尽管这似乎只适用于[[ ... ]]扩展测试运算符:

$ first=abc; second=ABC
$ (shopt -s nocasematch; if [[ "$first" == "$second" ]]; then echo "Match"; else echo "No match"; fi)
Match
Run Code Online (Sandbox Code Playgroud)

$ (shopt -s nocasematch; if [ "$first" == "$second" ]; then echo "Match"; else echo "No match"; fi)
No match
~$ 
Run Code Online (Sandbox Code Playgroud)