前言 首先在Shell中,括号表示条件测试方法。主要用在if-then、case等需要条件判断的语句结构中。 最近在看bash,括号搞的我一头雾水,所以总结一下,理清思路!...括号 括号一般在命令替换的时候使用。 #!/bin/bash today=$(date +%y%m%d) touch log....$today 双括号 使用双括号,在比较过程中使用高级数学表达式 符号 描述 val++ 后增 val-- 后减 ++val 先增 --val 先减 !
一、小括号,园括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...如:array=(a b c d) 2、双小括号 (( )) ①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。...2、双中括号[[ ]] ①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。...④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。 三)大括号、花括号 {} 1、常规用法。 ①大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。
${a} 变量a的值, 在不引起歧义的情况下可以省略大括号。 2....$(cmd) 命令替换,和cmd效果相同,结果为shell命令cmd的输,过某些Shell版本不支持$()形式的命令替换, 如tcsh。 3....五.使用 多条命令执行 1.单小括号,(cmd1;cmd2;cmd3) 新开一个子shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后可以没有分号。...2.单大括号,{ cmd1;cmd2;cmd3;} 在当前shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后必须有分号, 第一条命令和左括号之间必须用空格隔开。...对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令
三.大括号、花括号 {} 常规用法 1.大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。...与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。...中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式 第二种模式: ${variable%%pattern},这种模式时,shell在variable...中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式 第三种模式:${variable#pattern} 这种模式时,shell在variable...中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式 第四种模式: ${variable##pattern} 这种模式时,shell在variable
Shell中有一个最基本的命令叫test,它可以测试数值、测试字符串和测试文件属性,是用得最多的命令,look: ? 当我们在执行分支语句、循环语句的时候,一般都离不开它,比如下面的脚本 #!.../bin/bash if [ -e file ] && [ -r file ] then cat file fi 注意到:test 被改成成一对方括号 [ ] ,顿时好看多啦!...可是你要看清楚,方括号的两边必须有空格,如果没有,那么等着被系统错误羞辱吧…… 然而,有些地方又绝对不能有空格,坑你没商量,比如变量定义赋值: name=Michael 上面的赋值号两边不能加空格,
Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试: 算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。...passwd" if [ -e $fpath ]; then echo File exits; else echo Does not exit; fi 字符串比较 在进行字符串比较时,最好使用双中括号...因为单中括号可能会导致一些错误,因此最好避开它们。 检查两个字符串是否相同: [[ $str1 = $str2 ]] 当 $str1 等于 $str2 时,返回真。...str2 ]]; then echo str1 is nonempty and str2 is empty string. fi test 命令也可以从来执行条件检测,用 test 可以避免使用过多的括号...if [ $var -eq 0 ]; then echo "True"; fi 等价于 if test $var -eq 0; then echo "True"; fi 参考: [1] Linux Shell
一.小括号,圆括号() 单小括号() 1.命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...等同于cmd,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。 3.用于初始化数组。...如:array=(a b c d) 双小括号(( )) 1.整数扩展。这种扩展计算是整数型的计算,不支持浮点型。...再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。 二.中括号,方括号[] 单中括号 [] 1.bash 的内部命令,[和test是等同的。...作为test用途的中括号内不能使用正则。 4.在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。 双中括号[[ ]] 1.[[是 bash 程序语言的关键字。
Shell 里面的中括号(包括单中括号与双中括号)可用于一些条件的测试: 算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。...字符串比较 在进行字符串比较时,最好使用双中括号 [[ ]]. 因为单中括号可能会导致一些错误,因此最好避开它们。 检查两个字符串是否相同: ? 当 str1等于str1等于str2 时,返回真。...test 命令也可以从来执行条件检测,用 test 可以避免使用过多的括号,[] 中的测试条件同样可以通过 test 来完成。 ? 等价于: ?
一、小括号,圆括号() 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...如:array=(a b c d) 2、双小括号 (( )) ①整数扩展。这种扩展计算是整数型的计算,不支持浮点型。...再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。...2、双中括号[[ ]] ①[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。...④bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。
echo ${HI^,^} # HellO 看来是不行的×_× 2、各类括号在 shell/bash 编程中的应用 上面应该见识到了 shell 中大括号的强大功能,其实 shell 下有很多种括号,不像其它高级语言括号只起到语法和意义的作用...,而 shell 下的每种括号除了语法、语义的作用之外,还对 shell 编程起到了功能上的扩展。...4、Refer: [1] shell十三问之大括号参数扩展(Parameter Expansion) http://hi.baidu.com/leejun_2005/item/138c09343aaddff6e6bb7a49...[2] shell 十三問? ...mod=viewthread&tid=218853&page=7# [3] shell/bash编程中各类括号的应用 http://hi.baidu.com/leejun_2005/item/6f9eb7345e5f4f302f20c453
最近学到了shell脚本编程,觉得脚本中的不同括号有不同的用处,以及有些括号的格式也有特殊要求,下面我就总结一下各种括号的用法。...一、小括号();双小括号(()) 1、单小括号 () 1:命令替换。...(()) ((表达式))常用于算术运算比较,双括号中的变量可以不使用$符号前缀。...再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。 #求100以内的偶数 #!...[ ];双中括号[[ ]] 1:单中括号[ ] 1:算术比较, 比如一个变量是否为0, [ $var -eq 0 ]。
结论先行 避免像这样,在 Java 中使用双括号初始化: new HashMap() {{ put("key", value); }}; 内存泄漏追踪 我最近正在...ticketId); }}; bugsnagClient.leaveBreadcrumb("Saving Ticket", metadata, LOG); } 这段代码利用了一个被称为“双括号初始化...总结 尽管使用 Java 的双括号初始化看起来很"炫酷",但它会无故地额外创建类,可能会导致内存泄漏。因此避免在 Java 中使用双括号初始化。
什么是shell? shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口(命令解释器) 。它接收用户输入的命令并把它送入内核去执行。起着用户与系统之间进行交互的作用。 ?...shell的功能: 命令行解释 命令的多种执行顺序 通配符 命令补全、别名机制、命令历史 I/O重定向 管道 命令替换(` ` 或$( ) ) shell编程语言 shell可以执行——内部命令、外部命令...shell命令分为: 内部(内置)命令 内部命令是shell本身包含的一些命令,这些内部命令的代码是整个shell代码的一个组成部分; 内部命令的执行是shell通过执行自己的代码中的相应部分来完成的...外部(外置)命令 外部命令的代码则存放在一些二进制的可执行文件或者shell脚本中; 外部命令执行时,shell会在文件系统中指定的一些目录去搜索相应的文件,然后调入内存执行。...shell变量PATH中 ?
1 变量的分类 在Linux中,变量分为环境变量 和 局部变量。 环境变量能被子进程继承,而局部变量只能在当前进程中使用。...SHELL:当前使用的SHELL HISTSIZE:历史命令的最大条数 MAIL:当前用户的邮箱目录 PATH:可执行文件的查找路径。...1.2 常见的局部变量(非环境变量) PS1:命令提示符 在命令输入光标前有一串用中括号括起来的信息,这就是命令提示符。命令提示符究竟需要显示哪些信息,这就是由PS1这个局部变量决定的。...2.3 取消变量 unset 变量名 3 环境变量 自定义变量相当于局部变量,只能在当前shell中使用;而环境变量相当于全局变量,可以在子shell中使用。...5 变量类型:declare/typeset Linux中的变量一共有5种类型,分别是:字符、整型、只读、环境变量。
Double Brace Initialization should not be used 前言 最近在修改sonar问题时,发现有人使用双花括号初始化集合,提示可能发生内存泄漏。...Thread.sleep(1000); } } 输出 访问外部类对象的属性:bob Thread name: Finalizer Object: sandy Gc happen 分析 匿名内部类持有外部类对象引用 双花括号初始化时...使用了匿名内部类 双花括号初始化的方法 非双花括号初始化的方法 编译后产生的文件 可以发现,多了一个内部类:A$1.class。...查看内部类字节码 拥有一个外部类的成员变量 通过构造方法传入了外部类对象的引用 将外部类对象的引用赋值给成员变量 执行我们写的put方法 内部类继承于HashMap 发生了内存泄漏 使用非双花括号初始化...map的sandy被回收了,而使用双花括号初始化map的bob却没有被回收。
问题 在Shell脚本中,在什么情况下需要在变量扩展时使用 {}?...这时就需要用花括号告诉 Shell 解释器变量名的结束位置。...花括号还无条件需要在以下情况下使用: 扩展数组元素,如:${array[5]} 使用参数扩展操作,如:${filename%.*}(移除扩展名;剥离最小的匹配) 扩展总数超过 9 的位置参数,如:"{10...你还可以在花括号内进行一些文本操作: STRING="....参考 stackoverflow question 8748831 https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
数字丢了括号 TARGETS=`ps -ef|grep my.py| grep -v "grep"|awk '{print $2}'` 这样定义后TARGETS后并不是数组,只是一个文本值。...2.shell数组认识 What is a shell?...当以非交互方式执行时,shell执行从文件读取的命令。 shell允许同步和异步执行GNU命令。...例如,cd,break,continue和exec不能在shell之外实现,因为它们直接操作shell本身。...://www.tecmint.com/working-with-arrays-in-linux-shell-scripting/ 定义数组 declare -a var 数组赋值 var[XX]=<
在 Shell 语言中,可以直接定义变量。不过需要注意,在定义变量的过程中需要遵守一定的规则。这与绝大部分的编程语言类似。...~/08.shell $ b=2 1.2 shell 变量的引用 在 shell 中,直接使用“$”符,即可引用变量的值;一般配合 echo 命令可以打印变量的值; (base) xiehs...16:23:21 ~/08.shell $ echo $a $b 1 2 (base) xiehs 16:23:57 ~/08.shell $ echo $a 1 (base) xiehs 16:23...:59 ~/08.shell $ echo $b 2 如果变量名之后接有其他字符,可以使用”{}”进行区分。...(base) xiehs 16:24:01 ~/08.shell $ a=illumina (base) xiehs 16:24:23 ~/08.shell $ echo ${a}_1.fq.gz ${
,没找到匹配) if command then if 函数 then 2.表达式结果为真,则返回0,if把0值引向then if [ expression_r_r_r ] #方括号前后要有空格...四、shell的if与c语言if的功能上的区别 shell if:0为真,接着走then。...同时由于shell里没有> 和< ,会被当作尖括号,整数条件表达式只有-ge, -gt,-le, lt。 5....=放在别的地方是赋值,放在if [ ]里就是字符串等于,shell里面没有==的,那是c语言的等于。 6.= 作为等于时,其两边都必须加空格,否则失效!!!...= -d –f –x -ne -eq -lt等合用 · 逻辑符号就正常的接其他表达式,没有任何括号( ),就是并列 if [ -z “$JHHOME” -a -d $HOME/$num
函数创建两种方式: function name { command; } name () { command; } 在shell中创建的variable...shell将function当做一个mini-script,因此可以用调用脚本的方式来调用函数,在函数中也可以用$1,$@等方式得到传的参数。...向function中传递array时会出现问题,需要单个传入,在函数中再包装成array,shell中的array不太好用。 函数默认的返回值是最后一条命令的exit code,可以用$?
领取专属 10元无门槛券
手把手带您无忧上云