• 一串的命令执行()和{}


    ()和{}都是对一串的命令进行执行,但有所区别

    相同点

    ()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开

    不同点

    ()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
    ()最后一个命令可以不用分号,{}最后一个命令要用分号
    ()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
    ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

    实例 

    [root@node01 ~]# var=test
    [root@node01 ~]# echo $var
    test
    当前shell
    [root@node01 ~]# (var=notest;echo $var)  开启了一个子shell
    notest
    [root@node01 ~]# echo $var
    test
    [root@node01 ~]# { var=notest;echo $var;}
    notest
    [root@node01 ~]# echo $var
    notest
    在{}中 第一个命令和{之间必须有空格,结束必须有;
    {}中的修改了$var的值 说明在当前shell执行
    [root@node01 ~]#  { var1=test1;var2=test2;echo $var1>a;echo $var2;}
    test2
    [root@node01 ~]# cat a
    test1
    [root@node01 ~]# (echo 1;echo 2)|awk '{print NF,$0}'
    1 1
    1 2

    几种特殊的替换结构

    ${var:-string},${var:+string},${var:=string},${var:?string}
    [root@node01 ~]# echo $k
    
    [root@node01 ~]# echo ${k:-jim}
    jim
    [root@node01 ~]# echo $k
    
    [root@node01 ~]# k=liujunjun
    [root@node01 ~]#  echo ${k:-jim}
    liujunjun
    变量k为空或者未定义,则用在命令行中用jim来替换
    [root@node01 ~]# unset k
    [root@node01 ~]# echo $k
    
    [root@node01 ~]# echo ${k:=jim}
    jim
    [root@node01 ~]# echo $k
    jim
    变量k为空或者未定义,则用变量k的值来替换。
    [root@node01 ~]# k=ljj
    [root@node01 ~]# echo $k
    ljj
    [root@node01 ~]# echo ${k:+jim}
    jim
    [root@node01 ~]# echo $k
    ljj
    [root@node01 ~]#  unset k
    [root@node01 ~]# echo $k
    
    [root@node01 ~]# echo ${k:+jim}
    
    [root@node01 ~]# 
    只有当k不是空的时候才替换成jim,若var为空时则不替换或者说是替换成变量k的值,即空值
    [root@node01 ~]# unset k
    [root@node01 ~]#  echo ${k:?jim}
    -bash: k: jim
    [root@node01 ~]# k=ax
    [root@node01 ~]# echo ${k:?jim}
    ax
    [root@node01 ~]# echo ${k:-`date`}
    ax
    [root@node01 ~]# unset k
    [root@node01 ~]# echo ${k:-`date`}
    2020年 02月 05日 星期三 21:17:45 CST
    [root@node01 ~]# echo ${k:-$(date)}
    2020年 02月 05日 星期三 21:17:51 CST
    [root@node01 ~]# b=abc
    [root@node01 ~]# echo ${k:-$b}
    abc
    若变量var不为空,则用变量var的值来替换${var:?string}
    若变量var为空,则把string输出到标准错误中,并从脚本中退出。
    可利用此特性来检查是否设置了变量的值
    [root@node01 ~]# echo $(3+2)
    -bash: 3+2: 未找到命令
    
    [root@node01 ~]# echo $((3+2))
    5
    [root@node01 ~]# echo $((3.5+2))
    -bash: 3.5+2: 语法错误: 无效的算术运算符 (错误符号是 ".5+2")
    [root@node01 ~]# echo $((3>2))
    1
    [root@node01 ~]# echo $((3>2?'a':'b'))
    -bash: 3>2?'a':'b': 语法错误: 期待操作数 (错误符号是 "'a':'b'")
    [root@node01 ~]# echo $((3>2?a:b))
    150
    [root@node01 ~]# echo $((a=3+2))
    5
    [root@node01 ~]# echo $((a++))
    5
    [root@node01 ~]#  echo $a
    6
    $((exp)) POSIX标准的扩展计算
    这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在$((exp)),包括三目运算符
    注意:这种扩展计算是整数型的计算,不支持浮点型和字符串等
    若是逻辑判断,表达式exp为真则为1,假则为0
  • 相关阅读:
    布局(layout)文件图形界面不能显示:An error has occurred. See error log for more details. java.lang.NullPointe
    Mac下无法推出硬盘
    Excel导入导出数据库(MVC)
    json导入数据库
    XML导入数据库
    Excel表格导入数据库
    Lambda高级查询
    Linq高级查询
    多线程
    反射
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12266675.html
Copyright © 2020-2023  润新知