如何在Bash中比较字符串
如何将变量与字符串进行比较(如果匹配则执行某些操作)?
#1楼
要将字符串与通配符进行比较,请使用
if [[ "$stringA" == *$stringB* ]]; then# Do something here
else# Do Something here
fi
#2楼
在if语句中使用变量
if [ "$x" = "valid" ]; thenecho "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)$ ]]; thenecho "valid action"
fi
请注意,我使用双逗号将变量$ACTION
小写。 还要注意,这对于太老的bash版本不起作用。
#6楼
a="abc"
b="def"# Equality Comparison
if [ "$a" == "$b" ]; thenecho "Strings match"
elseecho "Strings don't match"
fi# Lexicographic (greater than, less than) comparison.
if [ "$a" \< "$b" ]; thenecho "$a is lexicographically smaller then $b"
elif [ "$a" \> "$b" ]; thenecho "$b is lexicographically smaller than $a"
elseecho "Strings are equal"
fi
笔记:
if
和[
和]
之间的空格很重要>
和<
是重定向操作符,因此对于字符串,分别使用\\>
和\\<
对其进行转义。
#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" ]; thenecho "variable VAR matches with string TEST"
elseecho "VAR does not match with the string TEST"
fi
如何在Bash中比较字符串相关推荐
- 如何在 bash 中使用索引数组
数组是一种数据结构,表示具有相同数据类型的对象集合.bash shell中支持两种类型的数组:关联数组或索引数组.在本文中,将演示如何在 bash 中使用索引数组.以下使用 shell 示例来说明索引 ...
- python字符串筛选输出_如何在Python中过滤字符串列表
Python使用列表数据类型在顺序索引中存储多个数据.它的工作方式类似于其他编程语言的数字数组.filter()方法是Python的一种非常有用的方法.可以使用filter()方法从Python中的任 ...
- 一个如何在bash中使用getopts的例子
本文翻译自:An example of how to use getopts in bash I want to call myscript file in this way: 我想以这种方式调用my ...
- 如何在 bash 中使用键值字典
在字典中,字典存储一组键,每个键都有一个与之关联的值.可以使用对应的键在字典中插入.检索或更新值.字典数据结构针对基于键值的快速检索进行了优化,因此通常使用哈希表来实现.在不同的编程语言中,字典通常有 ...
- 如何在PHP中删除字符串中的所有空格? [重复]
本文翻译自:How do I strip all spaces out of a string in PHP? [duplicate] Possible Duplicate: 可能重复: To str ...
- 如何在JavaScript中获取字符串数组的字符串?
本文翻译自:How do you get a string to a character array in JavaScript? How do you get a string to a chara ...
- 如何在PowerShell中连接字符串和变量?
本文翻译自:How do I concatenate strings and variables in PowerShell? Suppose I have the following snippet ...
- bash中的字符串长度
本文翻译自:Length of string in bash How do you get the length of a string stored in a variable and assign ...
- Bash 中的字符串变量
Bash 中的字符串变量 s="1234567890"echo ${s} # 1234567890 echo ${s:0:5} # 12345 echo ${s:1:5} # 23 ...
最新文章
- Go 知识点(18)— 条件编译(编译标签、文件后缀)
- HDU 排名(简单题)
- 南开大学提出最新边缘检测与图像分割算法,精度刷新记录(附开源地址)
- Binder跨进程通信原理(二):内存映射mmap原理分析
- 建立低成本的安全运营中心
- How to run a estimaton
- 【源码解读】Vue与ASP.NET Core WebAPI的集成
- atitit.spring hibernate的事务机制 spring不能保存对象的解决
- [wikioi]最长严格上升子序列
- SPSS统计分析学习记录
- 这些年,这些ACM大佬-杜瑜皓访谈
- 网络编程 write 阻塞和非阻塞下的区别
- windowsxp下载python下载视频_Python实现视频下载功能
- FlashBuilder找不到所需要的AdobeFlashPlayer调试器版本的解
- Visual Paradigm创建UML的流程和一点实用技巧
- 设计模式--迭代器模式
- win10固定本机IP地址方案总结
- APP自动化学习之appium认识
- android 地铁地图api,利用高德地图api绘制公交+地铁的等时圈
- 支付宝交易查询接口分析及实现----springboot项目接入支付宝(四)