欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

macos shell 判断 字符串 以什么子字符开始 开头 示例 不以什么子字符开始 开头 示例 文心一言 chatgpt 有大用

在 macOS 的 shell 脚本中,你可以使用 Bash 脚本语言来判断一个字符串是否以特定的子字符串开始。以下是一个示例,展示了如何判断一个字符串是否以特定的子字符串(例如 "apple")开始:

bash复制代码

#!/bin/bash  



# 要检查的字符串  

str="apple pie is delicious"  



# 要检查的子字符串  

prefix="apple"  



# 使用 Bash 的模式匹配功能来判断字符串是否以指定的子字符串开始 两个中括号表示模式匹配或者理解为正则  

if [[ $str == $prefix* ]]; then         # $prefix*的前后不能有双引号

   echo "字符串以 '$prefix' 开始"  

else  

   echo "字符串不以 '$prefix' 开始"  

fi
解释

在这个示例中,我们定义了一个字符串 str 和一个子字符串 prefix。然后,我们使用 Bash 的模式匹配功能 [[ $str == $prefix* ]] 来判断 str 是否以 prefix 开始。如果是,就输出 "字符串以 'apple' 开始",否则输出 "字符串不以 'apple' 开始"。

你可以将这段代码保存为一个 .sh 文件,比如 check_prefix.sh,然后在 macOS 的终端中运行它。记得在运行之前先给文件添加执行权限,可以使用 chmod +x check_prefix.sh 命令。然后,通过 ./check_prefix.sh 来运行脚本。



在 Bash 脚本中,如果你想要检查一个字符串不以指定的子字符串开始,你可以通过修改条件判断的逻辑来实现。在你的原始脚本中,你使用了模式匹配来检查字符串是否以某个子字符串开始。为了求反,即检查字符串不以该子字符串开始,你可以简单地使用逻辑非(!)来反转条件的结果。

但是,直接使用 ! 在 Bash 的 [[ ]] 条件表达式中可能不会按你期望的方式工作,因为 [[ ]] 本身就返回一个退出状态(0 表示真,非0 表示假),而 ! 在 Bash 中通常用于命令的否定,而不是条件表达式的逻辑非。不过,在 [[ ]] 中,你可以通过反转条件表达式的比较结果来达到相同的效果。

下面是一个修改后的脚本示例,用于检查字符串是否不以指定的子字符串开始:

bash复制代码

#!/bin/bash    



# 要检查的字符串    

str="apple pie is delicious"    



# 要检查的子字符串    

prefix="banana"  # 修改为与原始字符串不同的前缀以演示  



# 使用 Bash 的模式匹配功能来判断字符串是否不以指定的子字符串开始  

# 注意:这里我们实际上是在检查它是否不以 prefix 开始,所以使用了 != 和 ~ 模式匹配  

if [[ ! $str =~ ^$prefix ]]; then  

echo "字符串不以 '$prefix' 开始"    

else    

echo "字符串以 '$prefix' 开始(尽管这里我们期望它不会这样显示)"    

fi

在这个例子中,我使用了 =~ 来进行正则表达式匹配,并使用了 ^ 来指定字符串的开始位置。! 用来反转整个条件的结果。

然而,如果你想要坚持使用通配符模式而不是正则表达式,你可以稍微调整你的条件来避免使用 !,而是直接比较一个不匹配的模式:

bash复制代码

#!/bin/bash    



# ...(与之前相同)  



# 使用 Bash 的模式匹配功能来判断字符串是否不以指定的子字符串开始  

# 注意:这里我们使用了 ${str#prefix} 来尝试移除前缀,并检查结果是否为原字符串  

if [[ ${str#"$prefix"} != "$str" ]]; then  

echo "字符串不以 '$prefix' 开始"    

else    

echo "字符串以 '$prefix' 开始(尽管这里我们期望它不会这样显示)"    

fi

这里,${str#"$prefix"} 会尝试从 $str 的开头移除 $prefix,如果 $str 不以 $prefix 开始,那么结果仍然是 $str 本身,此时条件为真(因为 $str 不等于移除了前缀的 $str)。这种方法虽然有效,但在处理空 $prefix 时需要特别注意。


普通分类: