如何在Bash中比较字符串

如何将变量与字符串进行比较(如果匹配则执行某些操作)?


#1楼

要将字符串与通配符进行比较,请使用

if [[ "$stringA" == *$stringB* ]]; then
  # Do something here
else
  # Do Something here
fi

#2楼

在if语句中使用变量

if [ "$x" = "valid" ]; then
  echo "x has the value 'valid'"
fi

如果您想在它们不匹配时执行某些操作,请将=替换= != 。 您可以在各自的文档中阅读有关字符串运算算术运算的更多信息。

为什么我们在$x周围使用引号?

您需要在$x周围加上引号,因为如果它为空,则bash脚本会遇到语法错误,如下所示:

if [ = "valid" ]; then

==运算符的非标准用法

请注意, bash允许==用于与[相等[ ,但这不是标准的

使用第一种情况,其中$x左右的引号是可选的:

if [[ "$x" == "valid" ]]; then

或使用第二种情况:

if [ "$x" = "valid" ]; then

#3楼

或者,如果您不需要else子句:

[ "$x" == "valid" ] && echo "x has the value 'valid'"

#4楼

您还可以使用用例/ esac

case "$string" in
 "$pattern" ) echo "found";;
esac

#5楼

如果输入只有几个有效条目,我可能会使用regexp匹配项。 例如,只有“开始”和“停止”是有效的动作。

if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
  echo "valid action"
fi

请注意,我使用双逗号将变量$ACTION小写。 还要注意,这对于太老的bash版本不起作用。


#6楼

a="abc"
b="def"

# Equality Comparison
if [ "$a" == "$b" ]; then
    echo "Strings match"
else
    echo "Strings don't match"
fi

# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; then
    echo "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; then
    echo "$b is lexicographically smaller than $a"
else
    echo "Strings are equal"
fi

笔记:

  1. if[]之间的空格很重要
  2. ><是重定向操作符,因此对于字符串,分别使用\\>\\<对其进行转义。

#7楼

我必须不同意其中一项评论:

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

不,那不是疯子

只是看起来好像是一个未开始的人...

它以某种方式使用通用模式作为语言。

在您学习了语言之后。

其实很高兴读

这是一个简单的逻辑表达式,有一个特殊部分:逻辑运算符的惰性求值。

[ "$x" == "valid" ] && echo "valid" || echo "invalid"

每个部分都是一个逻辑表达式; 第一个可能为true或false,其他两个始终为true。

(
[ "$x" == "valid" ] 
&&
echo "valid"
)
||
echo "invalid"

现在,在评估时,将检查第一个。 如果为假,则与逻辑的第二个操作数 &&无关。 第一个是不正确的,因此无论如何它不能是第一个和第二个都是正确的。
现在,在这种情况下是逻辑 ||的第一面。 错误,但如果另一面(第三部分)是正确的,则可能是正确的。

因此,将对第三部分进行评估-主要是将消息写为副作用。 (它的结果为0为true,在此不使用)

其他情况相似,但更简单-而且-我保证! 是-可以-易于阅读!
(我没有,但是我认为拥有灰胡子的UNIX老手对此很有帮助。)


#8楼

以下脚本逐行从名为“ testonthis”的文件中读取内容,然后将每行与一个简单字符串,一个包含特殊字符的字符串和一个正则表达式(如果不匹配)进行比较,则脚本将不打印o / w行。

bash中的空间非常重要。 所以下面的工作

[ "$LINE" != "table_name" ] 

但是以下内容不会:

["$LINE" != "table_name"] 

所以请按原样使用:

cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done

#9楼

我这样做是与bash,破折号(sh)兼容的:

testOutput="my test"
pattern="my"

case $testOutput in (*"$pattern"*)
    echo "if there is a match"
    exit 1
    ;;
(*)
   ! echo there is no coincidence!
;;esac

#10楼

Bash4 +示例。 注意:如果单词包含空格等,不使用引号会引起问题。始终在bash IMO中使用引号。

这是BASH4 +的一些示例:

示例1,检查字符串中的“是”(不区分大小写):

    if [[ "${str,,}" == *"yes"* ]] ;then

示例2,检查字符串中的“是”(不区分大小写):

    if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then

示例3,检查字符串中的“是”(区分大小写):

     if [[ "${str}" == *"yes"* ]] ;then

示例4,检查字符串中的“是”(区分大小写):

     if [[ "${str}" =~ "yes" ]] ;then

示例5,完全匹配(区分大小写):

     if [[ "${str}" == "yes" ]] ;then

示例6,完全匹配(不区分大小写):

     if [[ "${str,,}" == "yes" ]] ;then

示例7,完全匹配:

     if [ "$a" = "$b" ] ;then

请享用。


#11楼

if [ $VAR= "TEST" ]; then
    echo "variable VAR matches with string TEST"
else
    echo "VAR does not match with the string TEST"
fi
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值