Shell脚本中经常需要用到一些括号和引号的表达式,它们的作用各不相同。本文详细介绍了它们。1.双引号""双引号常用于包含一组字符串。双引号中,除了“$”、“\”、“`(反引号)”有特殊含义外,其他字符(如IFS、换行、回车等)没有特殊含义。$a=3$echo"$a"输出3,$符号在双引号里还是有特殊意义的。2、单引号''单引号的作用与双引号类似,只是单引号内的所有字符没有特殊意义:$a=3$echo'$a'输出结果为$a、可以看出单引号里面的$符号没有起作用。3.反引号``反引号的作用是命令替换。反引号``中的内容通常是命令行。程序会先执行反引号中的内容,用运行结果替换反引号中的内容。例如:$echo`date`命令会先执行反引号中的date命令,然后使用echo命令打印出date命令的结果(效果与直接使用date命令是一样的)。又如:#!/bin/basha=3b=5c=`expr$a\*$b`echo$cexit04,$+括号$()$(...)与反引号效果相同,命令替换:#!/bin/bashforfilein$(ls/)doecho$filedoneexit0该脚本使用for循环打印根目录下所有文件的文件名,先用$(ls/)获取根目录下的所有文件,并将它们作为参数列表传递给for结构体。5、$+双括号$(())$(())的作用是进行算术运算,括号内的内容是数学表达式。使用$(())求数学表达式的值:#!/bin/basha=3b=5c=$(($a*$b))echo$cexit0上面脚本的输出是15,使用$(())进行数学运算时,不用担心诸如乘号(*)之类的运算符被shell误解为其他东西,因为它们都在括号内。6、$+方括号$[]$[]与$(())作用相同,用于算术运算。7、$+花括号${}${}的作用是变量替换,类似于$符号,但是${}比$的替换范围更精确:#!/bin/basha=3b=5echo$abecho${a}bexit0这个脚本,在第一次输出$ab的时候,会把ab当作一个变量,然后打印ab的值,显然是空的;第二次用${a}b,输出a的值,然后打印一个字符b到STDOUT。8、圆括号()圆括号可以用来定义一个数组变量,如下:array1=(12345) //在shell中定义一个数组变量array2=(onetwothreefourfive)来获取数组元素的值使用$符号,如下:$echo$array1$1$$echo${array1[2]}#取数组中的一个元素,索引用方括号括起来。和大多数语言一样,数组的索引从0开始$3$$echo${array2[0]}$one$$echo${array2[*]}#输出整个数组$onetwothreefourfive这里使用了${}表达式用于变量替换。注意:在shell中使用数组变量有时会引起一些问题,而且数组变量的可移植性不是很好,所以在shell编程中,数组变量用得不多。9.双括号(())双括号命令允许在比较过程中使用高级数学表达式:((expression))其中表达式可以是任何数学赋值或表达式。与test命令相比只能使用简单的算术运算相比,双括号命令提供了更多的数学符号,可以在双括号中进行各种逻辑运算和数学运算,还支持更多的运算符(如++、--,ETC。)。在for循环中经常使用双括号来实现C风格的迭代:#!/bin/bashfor((i=0;i<10;i++))doecho-n"$i"doneecho""exit010,middleBrackets[]单方括号的作用与test命令相同,用于条件测试。#!/bin/bashread-p"pleaseenteranumber:"numif[$num-gt10];thenecho"num>10"elseecho"num<=10"fi11,双括号[[]]双括号提供字符串比较的高级特性,当使用双方括号[[]]进行字符串比较时,右边的项可以看做是一个模式,所以在[[]]中可以使用正则表达式:#!/bin/bashif[[hello==hell*]];thenecho"equal"elsecho"unequal"fiexit012,curlybraces{}花括号用于将语句块括起来。如果在只能使用单条语句的情况下需要使用多条语句(如AND、OR列表),可以用花括号将多条语句括起来构造语句块。总结:函数符号指的是字符串,字符串中的一些特殊符号是有意义的。双引号""引用字符串,字符串中的所有特殊符号都没有意义。单引号''命令替换反引号``,$()算术运算$(()),$[],(())变量替换${}数组初始化()条件测试[]字符串比较[[]]括起来statementblock{}以上是个人的一些总结,可能并不全面,以后遇到再补充。如果我错了,请纠正我。
