我如何比较一个变量的字符串(并做一些事情,如果他们匹配)?
当前回答
或者,如果你不需要else子句:
[ "$x" == "valid" ] && echo "x has the value 'valid'"
其他回答
你是否存在比较问题?(如下面?)
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的进一步示例(此处)
下面的脚本逐行读取名为“testonthis”的文件,然后将每行与简单字符串、带有特殊字符的字符串和正则表达式进行比较。如果不匹配,脚本将打印该行,否则不打印该行。
在Bash中,空间非常重要。所以下面的方法是可行的:
[ "$LINE" != "table_name" ]
但下面的情况不会:
["$LINE" != "table_name"]
所以请用as is:
cat testonthis | while read LINE
do
if [ "$LINE" != "table_name" ] && [ "$LINE" != "--------------------------------" ] && [[ "$LINE" =~ [^[:space:]] ]] && [[ "$LINE" != SQL* ]]; then
echo $LINE
fi
done
我这样做,是兼容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语句中使用变量
if [ "$x" = "valid" ]; then
echo "x has the value 'valid'"
fi
如果你想在它们不匹配的时候做一些事情,用!=替换=。您可以在它们各自的文档中阅读更多关于字符串操作和算术操作的信息。
为什么在$x周围使用引号?
你需要在$x周围加上引号,因为如果$x为空,你的Bash脚本会遇到如下所示的语法错误:
if [ = "valid" ]; then
==运算符的非标准使用
请注意,Bash允许使用==与[相等,但这不是标准的。
使用第一种情况,其中$x周围的引号是可选的:
if [[ "$x" == "valid" ]]; then
或者使用第二种情况:
if [ "$x" = "valid" ]; then
或者,如果你不需要else子句:
[ "$x" == "valid" ] && echo "x has the value 'valid'"
推荐文章
- 我应该如何从字符串中删除所有的前导空格?- - - - - -斯威夫特
- Linux Bash中双&和分号有什么区别?
- 在Bash中模拟do-while循环
- 在Bash中将输出赋给变量
- 将整数转换为字符串,以逗号表示千
- 将JavaScript字符串中的多个空格替换为单个空格
- printf()和puts()在C语言中的区别是什么?
- jQuery -替换字符串中某个字符的所有实例
- Base64长度计算?
- 使用split("|")按管道符号拆分Java字符串
- Std::cin输入空格?
- 如何在Mac OS X 10.6中使硬件发出哔哔声
- 我如何在c++中创建一个随机的字母数字字符串?
- 从Docker容器获取环境变量
- 如何使用JavaScript大写字符串中每个单词的第一个字母?