我如何比较一个变量的字符串(并做一些事情,如果他们匹配)?
当前回答
如果输入只有几个有效项,我可能会使用regexp匹配。例如,只有“开始”和“停止”是有效的操作。
if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
echo "valid action"
fi
注意,我使用双逗号小写变量$ACTION。还要注意,这在太老的bash版本上不起作用。
其他回答
你也可以使用用例/esac:
case "$string" in
"$pattern" ) echo "found";;
esac
我这样做,是兼容Bash和Dash (sh):
testOutput="my test"
pattern="my"
case $testOutput in (*"$pattern"*)
echo "if there is a match"
exit 1
;;
(*)
! echo there is no coincidence!
;;esac
我也曾在同样的情况下挣扎过一段时间,下面是我解决的方法:
if [ "$var1" == "$var2" ]; then
#dowhateveryouwant
fi
注意比较符号前后的空格,否则将不起作用,或者会得到意想不到的结果。
我花了很多时间在使用一个等号(=)上,但没有用。希望能有所帮助。
Bash 4+示例。注意:当单词中包含空格时,不使用引号会导致问题。在我看来,总是用Bash引用。
下面是Bash 4+中的一些例子:
例1,在字符串中检查'yes'(不区分大小写):
if [[ "${str,,}" == *"yes"* ]] ;then
例2,检查字符串中的'yes'(不区分大小写):
if [[ "$(echo "$str" | tr '[:upper:]' '[:lower:]')" == *"yes"* ]] ;then
例3,检查字符串中的'yes'(区分大小写):
if [[ "${str}" == *"yes"* ]] ;then
例4,检查字符串中的'yes'(区分大小写):
if [[ "${str}" =~ "yes" ]] ;then
例5,精确匹配(区分大小写):
if [[ "${str}" == "yes" ]] ;then
例6,精确匹配(不区分大小写):
if [[ "${str,,}" == "yes" ]] ;then
例7,精确匹配:
if [ "$a" = "$b" ] ;then
享受。
要比较字符串和通配符,使用:
if [[ "$stringA" == *"$stringB"* ]]; then
# Do something here
else
# Do something here
fi
推荐文章
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- Linux Bash中双&和分号有什么区别?
- 在Bash中模拟do-while循环
- 在Bash中将输出赋给变量
- 将整数转换为字符串,以逗号表示千
- 将JavaScript字符串中的多个空格替换为单个空格
- printf()和puts()在C语言中的区别是什么?
- jQuery -替换字符串中某个字符的所有实例
- Base64长度计算?
- 使用split("|")按管道符号拆分Java字符串
- Std::cin输入空格?
- 如何在Mac OS X 10.6中使硬件发出哔哔声
- 我如何在c++中创建一个随机的字母数字字符串?
- 从Docker容器获取环境变量
- 如何使用JavaScript大写字符串中每个单词的第一个字母?