为什么bash字符串比较器只在给定子字符串时工作?



我试图将用户从csv文件添加到在CentOS 8上运行的bash脚本中的组。组名是"Faculty"和&;students &;,我要求它们是小写的。下面的命令不起作用。默认为"else"子句,即使$groupName为"Faculty"(我会"回声";

if [ "$groupName" = "Faculty" ]
then
goodGroup="faculty"
else
goodGroup="student"
fi

然而,当我给它一个只包含大写字母的子字符串时,它工作了:

if [ "${groupName:0:1}" = "F" ]
then
goodGroup="faculty"
else
goodGroup="student"
fi

使用第二个方法给了我我需要的结果,我只是好奇为什么第一个代码没有工作。我在StackOverflow上看到的所有答案都说这是比较字符串的语法,所以我看不出我做错了什么。

在bash中强制变量值为小写而不必检查特定值的方法:

#!/usr/bin/env bash
# Using declare to give a variable the lowercase attribute
declare -l groupName1
groupName1=Faculty
printf "%sn" "$groupName1"
# Using parameter expansion
groupName2=FACULTY
printf "%sn" "${groupName2,,}" # or "${groupName2@L}"

相关内容

  • 没有找到相关文章

最新更新