前言

初次学习Shell,对于括号的使用肯定很困惑,所以我打算将其整理成一篇文章

单括号

{ }

  • 表达变量的值,在不引起歧义的时候可以省略大括号

    例子:

    var=1
    echo ${var}
    # 或者echo $var
  • (command1; command2; command3;) 新开多条命令来执行,各个命令之间用分号隔开,最后一个命令必须要分号来隔开;

( )

  • (command1; command2; command3) 命令组 新开多条命令来执行,各个命令之间用分号隔开,最后一个命令后面可以没有分号;

  • 初始化数组

    例子:

    array=(1 2 3 4)
    
    

[ ]

  • 字符串或是数字的比较,可用的运算符只有 ==!= ,比如 [[ ]] 里面介绍的;

  • 通过下标获取到数组中对应的元素

    例子


    arr=("a" "b" "c") echo ${arr[0]} #输出第一个的内容 echo ${arr[@]} #输出全部的内容

双括号

(( ))

  • $((exp))expr exp效果相同,计算数学表达式exp的数值;计算逻辑运算(常用于算术运算比较,双括号中的变量可以不使用$,支持多个表达式用 , 来隔开),exp里面只要符合c语言语法即可,前面的 $ 是在返回值给变量的时候才加上,如果只是元算可以不用加;

    例子:

    var=$(( 1+2 ))
    echo $var
    var=`expr 2 + 2`
    echo $var

    结果输出为3和4

[[ ]]

  • 判断结构,将判断语句放在双括号中,如果不想双括号,可以使用多个单裤好,常用于字符串的比较

    例子:


    a=10
    if [[ $a != 1 && $a != 2 ]]
    then
    echo "not 1 and not 2"
    fi if [ $a -ne 1 ] && [ $a != 2 ]
    then
    echo "not 1 and not 2"
    fi if [ $a -ne 1 -a $a != 2 ]
    then
    echo "not 1 and not 2"
    fi
  • 支持字符串的模式匹配,字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串;

    例子


if [[ "hell"=="hello" ]]
then
printf "not equal\n"
else
printf "equal\n"
fi if [[ hello==hell? ]]
then
printf "pattern true\n"
else
printf "pattern false\n"
fi
输出结果为
not equal
pattern true

Shell括号之间的区别的更多相关文章

  1. include 语句中使用双引号与括号有什么区别?

    Include 的语法 你在学习如何构造函数时,看到了不同的 include 语句: # include <iostream> # include "distance.h&quo ...

  2. shell脚本中的[]/[[]]区别

    转自:http://www.cnblogs.com/include/archive/2011/12/09/2307905.html 引用: http://www.51testing.com/?uid- ...

  3. Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...

  4. 学习 Shell —— 括号、引号

    shell中各种括号的作用().(()).[].[[]].{} shell中的括号(小括号,大括号/花括号) ${},大括号用于确定变量的范围: $(( 数学运算 )) 0. 引号 单引号.双引号.飘 ...

  5. terminal(终端),shell,tty,console(控制台)区别

    原文地址  stackexchange:What is the exact difference between a 'terminal', a 'shell', a 'tty' and a 'con ...

  6. 【转】控制台,终端,tty,shell等概念的区别

    转自:http://www.2cto.com/os/201403/282583.html http://blog.sina.com.cn/s/blog_bcdac52b0101i2r1.html 控制 ...

  7. profile bashrc bash_profile之间的区别和联系

    profile bashrc bash_profile之间的区别和联系 博客分类: Linux   执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bas ...

  8. 深入理解 sudo 与 su 之间的区别【转】

    深入理解 sudo 与 su 之间的区别 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升 ...

  9. 命令行界面 (CLI)、终端 (Terminal)、Shell、TTY的区别

    虽然这个话题已是老生常谈,搜索一下应该也能找到大把的相关文章.不过难得提到了这方面,就趁此机会把我的理解写下来,一来看看我是不是真正理解了,二来看看我能不能把它们之间的区别讲得更加简明易懂. 0. 太 ...

随机推荐

  1. shell基础学习系列(一)

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行. 输入一些代码: #!/bin/bash echo "Hello World !" &qu ...

  2. Web前端浏览器兼容问题

    所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登陆我们的系统,都应该是统一的 ...

  3. private关键字实现控制新建类数量

    private关键字作为一个重要的关键字,我们在开发中会经常用到,可是你有没有想过通过private关键字我们可以创建一个别人无法通过new来新建的类呢?下面我们就来看一下: package retu ...

  4. 【转】Netty系列之Netty并发编程分析

    http://www.infoq.com/cn/articles/netty-concurrent-programming-analysis

  5. 每天一个Linux命令(08)--cp命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  6. 面对考试毫无畏惧的SSH

    [Struts+Spring+Hibernate] 新建一个项目 把SSH jar包(包含mysql.oracle.jackson等包在里面) 把web.xml复制到WebContent\WEB-IN ...

  7. 【2017-2-17】C#基础 - 定义变量,输入输出

    1.初学C#. C#是专门为.NET的应用而开发的语言,他吸收了C++.Visual Basic.Delphi.Java等语言的优点,提高了程序开发的效率. 2.Visual Studio.NET的集 ...

  8. Java进程通讯

    管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. 创建子进程Java有两种方式 //第一种 Runtime rt = Runtime.get ...

  9. 使用C#操作文件

    读写文本文件 使用C#读写文本文件需要5个步骤: 1.创建文件流 2.创建阅读器或者写入器 3.执行读写操作 4.关闭阅读器或者写入器 5.关闭文件流 例 using System; using Sy ...

  10. java装箱跟拆箱解析

    /** * 在jdk1.5之后,java为基本数据类型到对应的应用数据类型提供了自动拆箱装箱操作 * 不管是自动拆箱还是自动装箱都是应用数据类型有的方法,基本数据类型是没有任何方法可调用的 *从概念上 ...