zoukankan      html  css  js  c++  java
  • Linux Shell 中各种括号的作用 ()、(())、[]、[[]]、{}

    请参考简书:https://www.jianshu.com/p/1a96d0d9da37

    大括号、花括号 {}

    代码块,又被称为内部组,这个结构事实上创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。
    如下
    JENKINS_WAR="/usr/lib/jenkins/jenkins.war"
    test -r "$JENKINS_WAR" || { echo "$JENKINS_WAR not installed";
            if [ "$1" = "stop" ]; then exit 0;
            else exit 5; fi; }

    [和[[的区别

    区别一

    在使用"[[ ]]"时,不能使用"-a"或者"-o"对多个条件进行连接。

    在使用"[ ]"时,如果使用"-a"或者"-o"对多个条件进行连接,"-a"或者"-o"必须被包含在"[ ]"之内。

    在使用"[ ]"时,如果使用"&&"或者"||"对多个条件进行连接,"&&"或者"||"必须在"[ ]"之外。

    区别二

    [是shell命令,在它包围的表达式是它的命令行参数,所以串比较符>和<需要转义,否则就变成io重定向了。

    [[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义。但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ "-z" "ab" ]。

    区别三

    [[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错。

    区别四

    对比字符串时,[ 末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。如if [[ $1 == a*a ]] 或者if [ $1x == a*ax ]

    区别五

    当使用"-n"或者"-z"这种方式判断变量是否为空时,"[ ]"与"[[ ]]"是有区别的,使用"[ ]"时需要在变量的外侧加上双引号,与test命令的用法完全相同,使用"[[ ]]"时则不用。

    区别六

    在使用符号"=~"去匹配正则表达式时,只能使用"[[  ]]",当使用">"或者"<"判断字符串的ASCII值大小时,如果结合"[ ]"使用,则必须对">"或者"<"进行转义。


    字符串和数字比较的区别

    在shell中对比字符串和对比数字,要分开两种方式。

    1)对比字符串只能使用==、<、>、!=、-z、-n。对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == "ab"x ]时如果没有了x ,并且$1是"",这个语句会翻译成if [ == "ab" ],左边相当于没有东西了,会报语法错误。或者使用[[ ]],就不需要x了。使用<或者>时,如果是用[ ],需要用转义符"",如>。

    2)对比数字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,-lt是less than,-le是less than or equal to。

  • 相关阅读:
    解决弹出的窗口window.open会被浏览器阻止的问题(自定义open方法)
    js call
    说说JSON和JSONP,也许你会豁然开朗
    按需加载/懒加载
    Sublime Text2 中Emmet(之前叫Zencoding)插件安装以及使用
    求数组中的最小值以及最小值的序列号
    软件工程概论作业03--将随机产生的表达式导入数据库
    软件工程作业01--四则运算1
    梦断代码阅读笔记
    学习进度条--第二周
  • 原文地址:https://www.cnblogs.com/faberbeta/p/linuxshell040.html
Copyright © 2011-2022 走看看