[ "$x" == "valid" ] && echo "x has the value 'valid'"
1049
要使用通配符比较字符串
if [[ "$stringA" == *$stringB* ]]; then
# Do something here
else
# Do Something here
fi
4
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
10 回答
我这样做的方式与bash,dash(sh)兼容:
在if语句中使用变量
如果要在不匹配时执行某些操作,请将
=
替换为!=
. 您可以在各自的文档中阅读有关string operations和arithmetic operations的更多信息 .为什么我们在$ x附近使用报价?
你想要
$x
周围的引号,因为如果它是空的,你的bash脚本会遇到语法错误,如下所示:非标准使用==运算符
请注意,
bash
允许==
用于与[
相等,但this is not standard .使用第一种情况,其中
$x
周围的引号是可选的:或使用第二种情况:
或者,如果您不需要else子句:
要使用通配符比较字符串
Notes:
if
和[
之间的空格和]
非常重要>
和<
是重定向运算符,因此对于字符串分别使用\>
和\<
进行转义 .我不得不在一点上不同意其中一条评论:
不,这不是一个疯狂的oneliner
它只是看起来像一个,嗯,没有经验......
它在某种程度上使用普通模式作为语言;
在你学会了这门语言之后 .
实际上,阅读很好
它是一个简单的逻辑表达式,有一个特殊部分:逻辑运算符的惰性求值 .
每个部分都是一个逻辑表达式;第一个可能是真的,也可能是假的,其他两个都是真的 .
现在,在评估时,检查第一个 . 如果为false,则与逻辑 and
&&
之后的第二个操作数无关 . 第一个不是真的,所以它不可能是第一个和第二个是真的,无论如何 .现在,在这种情况下,逻辑的第一面是 or
||
false,但如果另一方 - 第三方 - 是真的,则可能是真的 .所以第三部分将被评估 - 主要是将信息写成副作用 . (它的结果为
0
为true,我们这里不使用)其他情况类似,但更简单 - 而且 - 我保证!是 - 可以 - 易于阅读!
(我没有,但我认为作为一名有着灰胡子的UNIX老手对此有很大的帮助 . )
你也可以使用用例/ esac
以下脚本逐行从名为“testonthis”的文件中读取,然后将每行与一个简单的字符串,一个带有特殊字符的字符串和一个正则表达式(如果它不匹配)进行比较,那么脚本将打印该行而不是 .
bash中的空间非常重要 . 所以下面的工作
但是以下不会:
所以请按原样使用:
如果输入只有几个有效条目,我可能会使用regexp匹配 . 例如 . 只有“开始”和“停止”才是有效的动作 .
请注意,我使用双逗号's. Also note that this won'来处理过于老化的bash版本,从而小写变量
$ACTION
.Bash4的例子 . 注意:当单词包含空格等时,不使用引号会导致问题 . 总是引用bash IMO .
以下是BASH4的一些示例:
例1,检查字符串中的“是”(不区分大小写):
例2,检查字符串中的“是”(不区分大小写):
例3,检查字符串中的“是”(区分大小写):
例4,检查字符串中的“是”(区分大小写):
例5,完全匹配(区分大小写):
例6,完全匹配(不区分大小写):
例7,完全匹配:
请享用 .