我如何比较一个变量的字符串(并做一些事情,如果他们匹配)?
当前回答
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
享受。
其他回答
如果输入只有几个有效项,我可能会使用regexp匹配。例如,只有“开始”和“停止”是有效的操作。
if [[ "${ACTION,,}" =~ ^(start|stop)$ ]]; then
echo "valid action"
fi
注意,我使用双逗号小写变量$ACTION。还要注意,这在太老的bash版本上不起作用。
要比较字符串和通配符,使用:
if [[ "$stringA" == *"$stringB"* ]]; then
# Do something here
else
# Do something here
fi
你是否存在比较问题?(如下面?)
var="true"
if [[ $var == "true" ]]; then
# It should be working, but it is not...
else
# It is falling here...
fi
试试=~操作符(正则表达式操作符),它可能会工作:
var="true"
if [[ $var =~ "true" ]];then
# Now it works here!!
else
# No more inequality
fi
Bash正则表达式运算符=~(官方参考) StackOverflow的进一步示例(此处)
你也可以使用用例/esac:
case "$string" in
"$pattern" ) echo "found";;
esac
或者,如果你不需要else子句:
[ "$x" == "valid" ] && echo "x has the value 'valid'"
推荐文章
- indexOf()和search()的区别是什么?
- 我如何在Swift连接字符串?
- Shell脚本删除超过n天的目录
- 使用sudo时未找到命令
- 如何防止rm报告文件未找到?
- Bash:获取输出的第n列的最短方法
- 如何获得一个变量值,如果变量名存储为字符串?
- 在Ruby中不创建新字符串而修饰字符串的规范方法是什么?
- 为什么不是字符串。空一个常数?
- RVM不是一个函数,用' RVM use…’不会起作用
- 如何打破一个循环在Bash?
- 如何从终端机发送电子邮件?
- 如何删除表中特定列的第一个字符?
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- Linux Bash中双&和分号有什么区别?