Shell test 单中括号[] 双中括号[[]] 的区别

Shell中的中括号中括号区别 shell中的中括号中括号区别 阅读详情

在写Shell脚本的时候,经常在写条件判断语句时不知道该用[] 还是 [[]],首先我们来看他们的类别:

$type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin

[ test 是 Shell 的内部命令,而[[是Shell的关键字。

$test -f settings.py && echo True
True

$[ -f settings.py ] && echo True
True

[ 和test 是相等的

$[ 2 < 1 ] && echo True || echo False
True

$[[ 2 < 1 ]] && echo True || echo False
False

既然是命令, 它就和参数组合为一体被 shell 解释,那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。

x=1
y=1


$[ $x == 1 && $y == 1 ] && echo True || echo False
-bash: [: missing `]'
False


$[[ $x == 1 && $y == 1 ]] && echo True || echo False
True


$[ $x == 1 -a $y == 1 ] && echo True || echo False
True

[[中使用&&||表示逻辑与和逻辑或。[中使用-a 和-o 表示逻辑与和逻辑或。

$[[ 'abcd' == a*d ]] && echo True || echo False
True


$[ 'abcd' == a*d ] && echo True || echo False
False

[[支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

总结

使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,

但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]]

如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]

bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

$[ !(pip list | grep pip) ] && echo True || echo False
-bash: [: too many arguments
False


$[[ !(pip list | grep pip) ]] && echo True || echo False
True

一文搞定离线环境下的RAG引擎部署 在人工智能浪潮下,技术已成为构建智能问答、文档分析代码助手等应用的核心。然而,在许多企业场景中,出于数据安全性能的考虑,服务器往往部署在中,并要求极致的推理效率。这给依赖外部资源的应用部署带来了巨大挑战。如何在这种严苛的环境下,完整、可靠地部署一套包含向量数据库、**高性能推理服务(vLLM)**Python后台的复杂RAG系统呢?本文将为你提供一个,手把手教你如何使用 Docker 技术,将一套基于 Weaviate 的 Python RAG 应用完整打包,并在离线环境中一键部署。 阅读详情

相关推荐

【工具插件类教学】Unity翻书效果插件Book-Page Curl Pro教程

特征: • 从左到右从右到左翻页 • 与画布缩放器 配合使用 • 可配置的自动翻转脚本 • 支持向页面 添加 UI 元素 • 支持透明页面 • 适用于“世界空间”画布

纯技术流日常开发商业开发记录总结等 3607

shell if条件判断中:中括号中括号区别

  电脑重装了系统,登录虚拟机的shell脚本需重写,在为编写的脚本命名时发现存在同名脚本,才想起来是连接公司服务器的登录脚本,不想写俩脚本,怕记混了,那就整合一下。代码如下: #!/bin/bash#zxl.sh 脚本名  if [ $1 == 1 ]  then   ssh a.a.a.a  else   ssh b.b.b.b  fi   so easy,运行...

weixin_33797791的博客 7460

MTK联发科芯片线刷-教程-驱动-工具

MTK联发科芯片线刷-教程-驱动-工具\刷机工具 的目录 SP_Flash_Tool_v5.2032_Win.zip SP_Flash_Tool_V5.2404_Win.zip SP_Flash_Tool_V6.2404_Win.zipMTK联发科芯片线刷-教程-驱动-工具\教程 的目录 How to Fix Driver Signature Error on Windows Computer (Easy Guide).pdf How to install Android ADB Driver on Windows Computer (Easy Guide).pdf How-to flash or install Stock ROM (Firmware) using SP Flash Tool.pdf How-to install Mediatek Drivers using the Mediatek Driver Auto Installer.pdf MTK教程.docMTK联发科芯片线刷-教程-驱动-工具\驱动 的目录 Mediatek_Driver_Auto_Installer_v1.1352.zip MTK_USB_All_v1.0.8.zip usb_driver_r13-windows.zip

shell中括号中括号区别

1.括号TEST命令要对变量进行词分离,当变量值包含空白符时,要用引号将变量括起来;而括号的TEST命令不会对变量进行词分离。 以下情况分为变量为词,含有空格的词组。 [root@www yansan]# echo $name        hello [root@www yansan]# [ $name = "hello" ] [root@www ya

good_habits的专栏 8491

shell括号与括号的区别

总体来讲,中括号用法更强大 中括号 [ ] a. [ ] 两个符号左右都要有空格分隔 b. 内部操作符与操作变量之间要有空格:如 [“a” = “b” ] c. 字符串比较中,> < 需要写成> \< 进行转义 d. [ ] 中字符串或者${}变量尽量使用”” 引号扩住,以避免值未定义引用而出错 e. [ ] 中可以使用 –a –o 进行逻辑运算 f. ...

蓝关故人 6067

Shell编程】条件表达式中[][[]]的区别

安全性•。

wendao76的专栏 1348

Shelltest 中括号[] 中括号[[]] 的区别

Shell test 中括号[] 中括号[[]] 的区别 在写Shell脚本的时候,经常在写条件判断语句时不知道该用[] 还是 [[]],首先我们来看他们的类别: $type [ [[ test [ is a shell builtin [[ is a shell keyword test is a shell builtin [ testShell 的内部命令,而[[是Shell...

weixin_30394981的博客 288

shell中括号中括号区别

shell中括号中括号区别 1.[ "["是一个可执行程序,路径是"/usr/bin/[" 他与可执行程序"test"是等价的。 例子: if [ 3 -eq 2 ] ; then echo "=="; else echo "!="; fi; 等价于: if /usr/bin/[ 3 -eq 2 ] ; then echo "=="; else echo

tdmyl的专栏 2707

Linuxtest命令

参考 shell条件测试请问替代test语句的中括号中括号表达式的区别 分类参考 文件状态测试 -b filename 当filename 存在并且是块文件时返回真(返回0) -c filename 当filename 存在并且是字符文件时返回真 -d pathname 当pathname 存在并且是一个目录时返回真 -e path

从菜鸟到菜菜鸟 3112

shell内置命令test括号的区别

1、括号TEST命令要对变量进行词分离,当变量值包含空白符时,要用引号将变量括起来;而括号的TEST命令不会对变量进行词分离。 以下情况分为变量为词,含有空格的词组。 [root@www yujia]# echo $name hello [root@www yujia]# [ $name = "hello" ] [root...

weixin_34110749的博客 171

shell中测试命令中括号中括号区别

转载于https://blog.csdn.net/good_habits/article/details/277087451.括号TEST命令要对变量进行词分离,当变量值包含空白符时,要用引号将变量括起来;而括号的TEST命令不会对变量进行词分离。以下情况分为变量为词,含有空格的词组。[root@www yansan]# echo $name       hello[root@www...

piaoling691的博客 1817

shell脚本中各种括号的区别以及用法

最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括号的格式也有特殊要求,下面我就总结一下各种括号的用法。 一、小括号();小括号(())   1、小括号 ()     1:命令替换。等同于`comm`,shell扫描一遍命令行,发现了$(comm)结构,便将$(comm)中的comm执行一次,得到其标准输出,再将此输出放到原来命令。 # ls a b c ...

纤手小白 1万+

shell脚本下的 [ [ ] ][ ]的联系区别

1.中括号[ ]①bash 的内部命令,[test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。...

weixin_34249678的博客 373

Shell 中的中括号用法

shell中的中括号(也叫方括号) "[ ]"的用法: 1、中括号 [] ①bash 的内部命令,[test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号

Rachel Wang的little tree 599

shell中各种括号的作用详解()、(())、[]、[[]]、{}(推荐)

一、小括号,圆括号() 1、小括号 () ①命令组。括号中的命令将会新开一个shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令括号之间不必有空格。 ②命令替换。等同于cmd,shell扫描一遍命令行,发现了(cmd)结构,便将(cmd)结构,便将(cmd)结构,便将(cmd)中的cmd执行一次,得到其标准输出,再将此...

yupei881027的专栏 1222

探索shell中[ ][[]]的区别

多数情况下[ ][[]]是可以通用的,中括号 [ ],bash 的内部命令,[test是等同的。中括号[[ ]],[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。 [ ] [[]]区别 [ ]中可用的比较运算符只有==!=,可用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。 [[ ]] 支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[

chen1415886044的博客 4461

shell括号括号使用场景

使用括号 ([]) 时,它更适用于简的 POSIX 风格脚本,适合简的条件测试,如文件检查、简的字符串数值比较。使用括号 ([[]]) 时,它提供了更强大的功能灵活性,适合更复杂的条件测试,如逻辑运算、正则表达式匹配以及 Bash 特有的扩展功能。对于日常的 Shell 脚本开发,推荐使用括号 ([[]]) 进行条件判断,以利用其更强的功能更直观的语法。(): 创建子 Shell 或命令组。用于隔离环境或将命令组合在一起。(( )): 用于执行整数算术运算。{}

weixin_47082271的博客 1271

Shell中的括号、括号、方括号方括号

括号 括号一般在命令替换的时候使用。 #!/bin/bash today=$(date +%y%m%d) touch log.$today 括号 使用括号,在比较过程中使用高级数学表达式 符号 描述 val++ 后增 val-- 后减 ++val 先增 --val 先减 ! 逻辑求反 ~ 位求反 ** 幂求反 << 左位移 >> 右位移 &&

RyCloud的博客 2821

每天学习shell(一)shell指令中的各种括号的作用

根据经验汇总如下: 1、(()): 用于处理整数的算数、逻辑关系运算,可用于不同数制转换;可用于ifwhilefor的条件语句中;【且里面用的运算符,应该是符合C语言语法的运算符】 2、[[]]: 常用于字符串的处理, 支持字符串判空,判不空,字符串比较,字符串模式匹配; 一、小括号 1、小括号 () 1)命令替换传输:【这个功能可以同反引号作用一样『``』】 TEST_CASE="FuncTestCase#Test_1" test_sence=$(echo $TEST_C...

pinpinq的博客 1216
上一篇: SQL的日期函数
下一篇: presto 基本优化
V875311377
博客等级 码龄6年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值