zoukankan      html  css  js  c++  java
  • 【整理】Linux shell中各种括号的用法

    最近被shell里的各种括号弄的有点晕了,又是小括号又是中括号,有时又有花括号,小括号和中括号还有双层写法,用途各不一样,我搞混了多次,对它们的用法有些迷糊了,于是我在这里整理一下。如有错误,望诸君指正。


    小括号系列

    ()

    • 用途:数组初始化
    array=(1 2 3 4 5)
    

    $()

    • 用途:引用命令的运行结果
    # 先执行小括号中的命令,然后使用将命令的运行结果赋值给a
    a=$(command)
    

    (())

    • 用途1:数值比较
    #!/bin/bash
    
    a=1
    b=2
    if ((a>b))
    then
            echo "a>b"
    elif ((a<b))
    then    
            echo "a<b"
    fi
    # a<b
    
    • 用途2:高级数学运算
      双小括号命令提供了更多的数学符号,可以在双小括号中进行各种逻辑运算、数学运算,也支持更多的运算符(如 ++、-- 等)。
    #!/bin/bash
    
    # 实现c语言式迭代
    for ((i=0;i<5;i++))
    do
        command
    done
    

    $(())

    • 用途1:进行数学计算
    a=1
    b=2
    echo $((a+b)) # 3
    

    中括号系列

    []

    • 用途1:条件测试
      • 字符串比较
        == 等于
        != 不等于
      • 整数比较:
        -gt 不等于
        -lt 大于
        -ne 等于
        -gt 不等于
        -ge 大于等于
        -le 小于等于
    • 表达式与[]之间要有空格
    #!/bin/bash
    
    if [ hello == hello ]
    then    
            echo "yes"
    else    
            echo "no"
    fi
    # yes
    
    • 用途2:数组索引
    array=(1 2 3 4 5)
    echo ${array[2]}
    # 3
    

    $[]

    • 效果等同于$(())

    [[]]

    • 用途:字符串比较的高级模式
      && || < > 可以正常存在于[[]]中
      可在[[]]中使用正则表达式
    #!/bin/bash
    
    if [[ hello == hell* ]]
    then    
            echo "yes"
    else    
            echo "no"
    fi
    # yes
    

    花括号系列

    {}

    • 用途:构造序列
    echo {1..5}    # 1 2 3 4 5
    echo {5..1}    # 5 4 3 2 1
    echo {1..10..2}    # 1 3 5 7 9
    echo {a..c}    # a b c
    echo {1..3}{a..c}    # 1a 1b 1c 2a 2b 2c 3a 3b 3c
    

    ${}

    • 引用变量值
    # 数组取值
    array=(1 2 3 4 5)
    echo ${array[2]}    # 3 
    
    a=1
    echo ${a}b    # 1b
    echo $ab    # bash会认为ab是一个整体,由于ab没有定义,所以会报错
    

    总结

    • 引用:
      • 引用变量值 ${}
      • 引用命令运行结果 $()
    • 数学运算:$[] (()) $(())
    • 条件测试:[] [[]] (())
  • 相关阅读:
    Luncene介绍
    多线程&定时器Timer&同步&线程通信&ThreadLocal
    JVM垃圾收集器&对象的引用回收
    JVM介绍&自动内存管理机制
    JS原生Ajax&Jquery的Ajax技术&Json
    Jedis/JedisPool和Redis数据类型与特性
    NoSQL&Redis
    maven中的jar包未下载完全如何解决?
    如何在IntelliJ IDEA中配置Maven
    pip安装超时怎么办?
  • 原文地址:https://www.cnblogs.com/CharrammaBlog/p/12638235.html
Copyright © 2011-2022 走看看