原作者:tongye

原文链接:https://www.cnblogs.com/tongye/p/10646211.html

以下为原文:

Shell 脚本中经常需要用到一些括号、引号表达式,功能各不相同,本文详细介绍一下。

1、双引号 " "

  双引号常用于包含一组字符串,在双引号中,除了 "$"、""、" ` (反引号)"有特殊含义外,其余字符(如IFS、换行符、回车符等)没有特殊含义。

    $ a=3
$ echo "$a"

  输出结果为 3,在双引号中 $ 符仍有特殊含义。

2、单引号 ' '

  单引号的功能与双引号类似,不过单引号中的所有字符都没有特殊含义:

    $ a=3
$ echo '$a'

  输出结果为 $a,可见在单引号中 $ 符是不起作用的。

3、反引号

  反引号的功能是命令替换,在反引号 中的内容通常是命令行,程序会优先执行反引号中的内容,并使用运行结果替换掉反引号处的内容。举个例子:

    $ echo `date`

  这行命令会先执行反引号中的命令 date,然后用 echo 命令打印出 date 命令的结果(与直接使用 date 命令效果一样)。再举个例子:

    #!/bin/bash

    a=3
b=5
c=`expr $a \* $b` echo $c exit 0

4、$ + 小括号 $( )

  $(...) 的作用与反引号一样,也是命令替换:

    #!/bin/bash

    for file in $(ls /)
do
echo $file
done exit 0

  这个脚本使用 for 循环打印根目录下所有文件的文件名,使用 $(ls /) 先获得根目录下的所有文件,并将其作为参数列表传给 for 结构。

5、$ + 双小括号 $(( ))

  $(( )) 的功能是进行算术运算,括号中的内容为数学表达式,使用 $(( )) 可以求数学表达式的值:

    #!/bin/bash

    a=3
b=5
c=$(($a * $b))
echo $c exit 0

  上述脚本的输出结果为 15。

  使用 $(( )) 进行数学运算时,不需要担心乘号( * )等运算符被 shell 误解为其他含义,因为它们都在括号内。

6、$ + 中括号 $[ ]

  $[ ] 的功能与 $(( )) 一样,都是用于算术运算。

7、$ + 大括号 ${ }

  ${ } 的功能是变量替换,类似于 $ 符,但是 ${ } 比 $ 的替换范围更精准:

    #!/bin/bash

    a=3
b=5
echo $ab
echo ${a}b exit 0

  这段脚本,第一次输出 $ab 的时候,会把 ab 视作一个变量,然后打印 ab 的值,显然为空;第二次使用 ${a}b,则会先输出 a 的值然后再向 STDOUT 打印一个字符 b。

8、小括号 ( )

  小括号可以用来定义一个数组变量,如下:

    array1=(1 2 3 4 5)            // 在 shell 中定义一个数组变量
array2=(one two three four five)

  取数组元素的值也是使用 $ 符号,如下:

$ echo $array1
$ 1
$
$ echo ${array1[2]} # 取数组中的一个元素,索引用方括号括起来,和大部分语言一样,数组的索引是从 0 开始的
$ 3
$
$ echo ${array2[0]}
$ one
$
$ echo ${array2[*]} # 输出整个数组
$ one two three four five

  这里使用了 ${ } 表达式,进行变量替换。

注意:在 shell 中使用数组变量有时会引起一些问题,而且数组变量的可移植性并不好,因此在 shell 编程中,数组变量使用得并不多。

9、双小括号 (( ))

  双小括号命令允许在比较过程中使用高级数学表达式:

    (( expression ))

  其中,expression 可以是任意的数学赋值或表达式。相比 test 命令只能在比较中使用简单的算术操作,双小括号命令提供了更多的数学符号,可以在双小括号中进行各种逻辑运算、数学运算,也支持更多的运算符(如 ++、-- 等)。

  常使用的双小括号来在 for 循环中实现 C 语言风格的迭代:

    #!/bin/bash

    for ((i = 0; i < 10; i++))
do
echo -n "$i "
done
echo "" exit 0

10、中括号 [ ]

  单个的中括号的功能与 test 命令一样,都是用作条件测试。

    #!/bin/bash

    read -p "please enter a number: " num

    if [ $num -gt 10 ]; then
echo "num > 10"
else
echo "num <= 10"
fi

11、双中括号 [[ ]]

  双中括号提供了针对字符串比较的高级特性,使用双中括号 [[ ]] 进行字符串比较时,可以把右边的项看做一个模式,故而可以在 [[ ]] 中使用正则表达式:

    #!/bin/bash

    if [[ hello == hell* ]]; then
echo "equal"
else
echo "uneq复制代码ual"
fi exit 0

12、大括号 { }

  大括号用于括起一个语句块。如果需要在某些只能使用单个语句的地方(如AND、OR列表中)使用多条语句,则可以用大括号将这多条语句括起来构造一个语句块。

总结:

功能 符号

引用字符串,字符串中部分特殊符号有意义 双引号 " "

引用字符串,字符串中特殊符号全都没有意义 单引号 ' '

命令替换 反引号 、$()

算术运算 $(( ))、$[ ]、(( ))

变量替换 ${}

数组初始化 ()

条件测试 [ ]

字符串比较 [[ ]]

括起一个语句块 { }

【转载】Shell 基础 -- 总结几种括号、引号的用法的更多相关文章

  1. Shell 基础 -- 总结几种括号、引号的用法

    Shell 脚本中经常需要用到一些括号.引号表达式,功能各不相同,本文详细介绍一下. 1.双引号 " " 双引号常用于包含一组字符串,在双引号中,除了 "$". ...

  2. Linux Shell基础 单引号、双引号、反引号、小括号和大括号

    单引号和双引号 单引号和双引号用于变量值出现空格时将字符用引号括起来. 二者的主要区别在于, 被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义: 被双引号括起来的字符中,"$& ...

  3. shell基础篇(三)--引号

    ---今天篇幅比较少:只介绍引号. shell中的引号有三种:双引号",单引号',反引号`1. 双引号:由双引号括起来的字符,除$.倒引号(`)和反斜线(\)仍保留其特殊功能外,其余字符均作 ...

  4. centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课

    centos shell基础知识 alias  变量单引号 双引号   history 错误重定向 2>&1  jobs  环境变量 .bash_history  source配置文件 ...

  5. (转)Linux基础------Shell数值计算的几种方法

    Linux基础------Shell数值计算的几种方法 原文:http://blog.csdn.net/fu_wayne/article/details/21620639 在Linux下总会遇到数值计 ...

  6. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...

  7. Linux实战教学笔记17:精简shell基础

    第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...

  8. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  9. Shell基础入门

    目录 Shell基础入门 1.什么是Shell? 2.Shell脚本的结构 3.Shell的变量 3.1.自定义环境变量 3.2.普通变量 3.3.位置参数变量 3.4.状态变量 4.条件测试和比较 ...

随机推荐

  1. python 子类调用父类成员的方法

    1.直接写类名调用: parent_class.parent_attribute(self) class Animal(): def __init__(self, name): self.name = ...

  2. 洛谷P3825 [NOI2017]游戏(2-SAT)

    传送门 果然图论的题永远建图最麻烦……看着题解代码的建图过程真的很珂怕…… 先不考虑地图$x$,那么每一个地图都只能用两种赛车,于是我们可以用2-SAT来搞,用$i$表示这个地图能用的第一辆车,$i' ...

  3. mysql-SQL语法

    细节查询:http://www.w3school.com.cn/sql/index.asp 1 DDL-data difinition lanuage数据定义语句 使我们有能力创建或删除表格,我们也可 ...

  4. bzoj 4859 [BeiJing2017]机动训练

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4859 题解 和管道取珠类似 首先把平方转化成两条路径经过的图案相同的方案数 对于一条路径 方 ...

  5. [WOJ1318]和最大

    题目链接: WOJ1318 题目分析: 首先我们要知道当这是一个线性的序列的时候应该怎么做:最大子序和 这里是线性的,就把数组复制两遍即可 好像有些细节要处理(也可能是我代码写丑了),具体的都在代码里 ...

  6. Salazar Slytherin's Locket CodeForces - 855E

    Salazar Slytherin's Locket CodeForces - 855E http://www.cnblogs.com/ftae/p/7590187.html 数位dp: http:/ ...

  7. 模拟+贪心 URAL 1804 The Machinegunners in a Playoff

    题目传送门 题意:A队和B队踢球,已知一场比赛A和B的得分情况,问A最小再得几分就能胜利还有最多能的几分还能给B队一丝翻盘的希望.规则如下: 1. 总分数相等的情况下,在客场得分高的获胜,如果还相等, ...

  8. angularjs 下select中ng-options使用

    当我有一堆object数据要用下拉框进行显示选择时,可以使用到angularjs中的select中的ng-options的属性.官网网址:https://docs.angularjs.org/api/ ...

  9. EmitMapper系列之一:EmitMapper入门

    EmitMapper的总结 EmitMapper简介 前言: 参考官网: http://emitmapper.codeplex.com/ Project Description Powerful cu ...

  10. java设计模式之单例设计模式

    单例设计模式 保证一个类在使用过程中,只有一个实例.优势就是他的作用,这个类永远只有一个实例. 优势:这个类永远只有一个实例,占用内存少,有利于Java垃圾回收. 单例设计模式关键点 私有的构造方法. ...