• linux 大中括号变量解读


    Linux中的小括号和大括号,${}/$()/()/{}/${var:-string}/${var:=string}/${var:+string}/${var:?string}/${var%pattern}/${var#pattern}/${var%%pattern}/${var##pattern}

     

    简单记录一下大小括号在Linux中的用处。

    1、${var},这是Linux中变量的原形。所以$var,别忘记了你的本来面目。

    复制代码
    # a=10
    # echo $a
    10
    # echo ${a}
    10
    # echo ${a}b
    10b
    复制代码

    2、$(command)与`command`效果相同,意为用command命令执行得到的标准输出来替换$(command)。

    # echo $(ls)
    temp1 temp2
    #echo `ls`
    temp1 temp2

    3、()与{}两者都是用来执行一串命令的。但是有区别的哦

    #两者都是用;来分隔命令的

    # (a=abc;echo $a;)
    abc
    # { a=abc;echo $a;)
    abc

    #{}左括号{后面要跟空格,()就不用了。

    # {a=abc;echo $a;}
    -bash: syntax error near unexpected token `}'

    #()最后一个命令可以不带;,但是{}强制带;。

    #()会在当前shell基础上开一个子shell进程来运行命令,但是{}是在当前shell直接运行命令。()新开一个子进程的时候,是会继承当前shell的环境的,但是在子进程任何操作是不会影响父进程(当前shell进程)的。

    复制代码
    # a=abc
    # echo $a
    abc
    # (echo $a)
    abc
    # (a=123; echo $a;)
    123
    # echo $a
    abc
    
    # a=abc
    # { a=123;echo $a;}
    123
    # echo $a
    123 #{}是当前进程下运行命令,所以a=123对当前的$a生效了。
    复制代码

    4、${var:-string}/${var:=string}/${var:+string}/${var:?string}

    现在知道上面提到的{为什么后面要带空格了吧,因为{还有其他用途的。

    简单说明一下:

    ${var:-string} -- 如果${var}为空,用string替换${var:-string},否则使用${var}替换

    ${var:=string} -- 如果${var}为空,用string替换${var:=string},并且${var}赋值为string,否则同上

    ${var:+string} -- 如果${var}不为空,则用string替换${var:+string},否则同上(也就是空)

    ${var:?string} -- 如果${var}为空,报错并退出程序(命令。。。),否则${var}替换${var:?string}

    5、${var%pattern}/${var#pattern}/${var%%pattern}/${var##pattern}

    % : 从后向前匹配

    # :从前向后匹配

    %% 和##:最长匹配,相对的%/#表示最短匹配,不过,这个只有在pattern含有通配符是才有效。

    通配符:*匹配0或多个任意字符,?匹配0或1个任意字符,[...]匹配,[]里任意一个字符,[^...]匹配任意不在[^]里的任意一个字符。

    复制代码
    # a=aabbccddee
    # echo ${a%e}
    aabbccdde
    # echo ${a%%e}
    aabbccdde #没有通配符,与%一个样
    # echo ${a%e*}
    aabbccdde
    # echo ${a%%e*}
    aabbccdd
    复制代码

    6、$((exp)),扩展运算

    复制代码
    # echo $((1+2))
    3
    # a=1
    # echo $((a+2)
    3
    复制代码
  • 相关阅读:
    2013国内IT行业薪资对照表【技术岗位】
    Eclipse查看子类
    whereis 查找命令全路径
    开张了
    Ruby1.8中单行字符串写在多行
    FEMTO是什么
    FUSE文件系统
    魔兽私服pvpgn搭建
    linux网络源码分析(1)
    freehosting申请空间和ssh D设置
  • 原文地址:https://www.cnblogs.com/chengjian-physique/p/9433899.html
Copyright © 2020-2023  润新知