• Linux shell 中$() ` `,${},$[] $(()),[ ] (( )) [[ ]]作用与区别


    转载自

    https://blog.csdn.net/x1269778817/article/details/46535729

    参考:

    https://stackoverflow.com/questions/669452/is-double-square-brackets-preferable-over-single-square-brackets-in-ba

    https://unix.stackexchange.com/questions/68694/when-is-double-quoting-necessary

    $()和 ` `  :

    在 bash shell 中,$( ) 与` ` (反引号) 都是用来做命令替换用(commandsubstitution)的。

    例如   version=$(uname -r)和version=`uname -r`都可以是version得到内核的版本号

    各自的优缺点:
    1. `  ` 基本上可用在全部的 unix shell 中使用,若写成 shell script ,其移植性比较高。但反单引号容易打错或看错。

    2. $()并不是所有shell都支持。

    ${ } :

    ${ }用于变量替换。一般情况下,$var 与${var} 并没有啥不一样。但是用 ${ } 会比较精确的界定变量名称的范围。比如

    $ A=B
    $ echo $AB
    原本是打算先将 $A 的结果替换出来,然后再补一个 B 字母于其后,
    但在命令行上,真正的结果却是只会提换变量名称为 AB 的值出来…
    若使用 ${ } 就没问题了:
    $ echo ${A}B
    BB

    ${ }的功能远不止于此,详见下表。

    $[] $(()) :

    它们是一样的,都是进行数学运算的。支持+ - * / %:分别为 “加、减、乘、除、取模”。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。

    例:
    $ a=5; b=7; c=2
    $ echo $(( a+b*c ))
    19
    $ echo $(( (a+b)/c ))
    6
    $ echo $(( (a*b)%c))
    1

    在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用,如:
    $(( $a + $b * $c)) 也可得到 19 的结果
    此外,$(( )) 还可作不同进位(如二进制、八进位、十六进制)作运算呢,只是,输出结果皆为十进制而已:
    echo $((16#2a)) 结果为 42 (16进位转十进制)

    [ ] :

    即为test命令的另一种形式。

    但要注意许多:

    1.你必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错。

    2.test命令使用标准的数学比较符号来表示字符串的比较,而用文本符号来表示数值的比较。很多人会记反了。使用反了,shell可能得不到正确的结果。

    3.大于符号或小于符号必须要转义,否则会被理解成重定向。

    (( ))及[[ ]] :

    它们分别是[ ]的针对数学比较表达式和字符串表达式的加强版。

    其中(( )),不需要再将表达式里面的大小于符号转义,除了可以使用标准的数学运算符外,还增加了以下符号:

    具体还可以看Linux 命令行与shell脚本编程大全

     

  • 相关阅读:
    Jmeter如何保持cookie,让所有请求都能用同一个cookie,免去提取JSESSIONID
    Jmeter如何提取响应头部的JSESSIONID
    Loadrunner如何进行有效的IP欺骗
    Center 6.5 redis 3.0安装
    小程序 wx.getRecorderManager 录音 to 语音识别
    微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
    java自然语言理解demo,源码分享(基于欧拉蜜)
    微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
    bash, sh, dash 傻傻分不清楚
    微信小程序语音识别服务搭建全过程解析(项目开源在github)
  • 原文地址:https://www.cnblogs.com/hong2016/p/9465711.html
Copyright © 2020-2023  润新知