zoukankan      html  css  js  c++  java
  • bash中的特殊符号

    ''  单引号,在单引号中所有的特殊符号都没有了特殊的意义。

    ""  双引号,在双引号中特殊符号都没有特殊含义但是  $    `  和    例外,分别拥有

      调度变量  引用命令  和  转义符  的特殊含义

    ``  反引号,反引号括起来的内容是系统命令,在bash中会优先执行,和  $()  的作用一样,不过推荐使用$(),

      反引号容易看错

    $()  和反引号的作用一样,引用系统命令

    ()  用于一串命令执行时,()中的命令会在子shell中执行

    {}  用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形与替换

    []  用于变量测试

    #  在shell脚本中,以#开头的行代表注释

    $  用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值

      转义符,跟在之后的特殊符号将失去特殊含义,变为普通字符。如$将输出$符号,不当做变量引用

    单引号和双引号

    单引号和双引号用于变量出现空格时,比如,name=xiao ming这样执行就会出现问题,而必须用引号括起来

    比如name="xiao ming"。不过引号有单引号和双引号之分,二者的主要区别在于,被单引号括起来的字符都是普通字符。

    就算特殊字符也不再有特殊含义,而被双引号括起来的字符中,"$"和""和反引号是拥有特殊含义的,"$"代表引用变量的值,而反引号

    代表引用命令。

    如果需要在双引号中输出$和反引号需要在符号前加上转义符

    例子就略啦

    反引号

    如果需要调用命令的输出,或把命令的输出赋予变量,则命令必须使用反引号包含,这条命令才会执行。反引号的作用和$(命令)是一样的

    但是反引号容易和单引号搞混。建议使用$(命令)

    小括号和大括号

    父shell子shell

    [root@andy ~]# pstree
    systemd─┬─NetworkManager─┬─dhclient
    │ └─2*[{NetworkManager}]
    ├─agetty
    ├─atd
    ├─auditd───{auditd}
    ├─chronyd
    ├─crond
    ├─dbus-daemon
    ├─httpd───5*[httpd]
    ├─lvmetad
    ├─master─┬─pickup
    │ └─qmgr
    ├─polkitd───5*[{polkitd}]
    ├─rpcbind
    ├─rsyslogd───2*[{rsyslogd}]
    ├─sshd───sshd───bash───pstree
    ├─systemd-journal
    ├─systemd-logind
    ├─systemd-udevd
    ├─tuned───4*[{tuned}]
    ├─vmtoolsd───{vmtoolsd}
    ├─vsftpd
    ├─xinetd
    ├─zabbix_agentd───5*[zabbix_agentd]
    └─zabbix_server
    [root@andy ~]#

    可以看到pstree在父shell中执行的

    [root@andy ~]# bash
    [root@andy ~]# pstree
    systemd─┬─NetworkManager─┬─dhclient
    │ └─2*[{NetworkManager}]
    ├─agetty
    ├─atd
    ├─auditd───{auditd}
    ├─chronyd
    ├─crond
    ├─dbus-daemon
    ├─httpd───5*[httpd]
    ├─lvmetad
    ├─master─┬─pickup
    │ └─qmgr
    ├─polkitd───5*[{polkitd}]
    ├─rpcbind
    ├─rsyslogd───2*[{rsyslogd}]
    ├─sshd───sshd───bash───bash───pstree
    ├─systemd-journal
    ├─systemd-logind
    ├─systemd-udevd
    ├─tuned───4*[{tuned}]
    ├─vmtoolsd───{vmtoolsd}
    ├─vsftpd
    ├─xinetd
    ├─zabbix_agentd───5*[zabbix_agentd]
    └─zabbix_server
    [root@andy ~]#

    执行一次bash后则pstree在子shell中执行的

    关于父shell和子shell,可以想象成在Windows中开启了一个cmd字符操作终端,Windows本身就是父shell,cmd就是子shell

    如果用于执行一串命令,小括号和大括号的区别

    ()执行一串命令时,需要重新开启一个子shell来执行

    {}执行一串命令时,在当前shell中执行

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

    ()最后一条命令可以不用分号

    {}最后一条命令也要用分号

    {}的第一条命令和左括号之间必须有一个空格

    ()里的各命令不必和括号有空格

    在执行一串命令时,如果使用的小括号,则这串命令所做的修改只在子shell中生效

    一旦命令结束,回到父shell中,这个修改就会丢失,而如果,使用的时大括号,则此串命令直接在父shell

    中执行,命令结束后,修改依然生效

  • 相关阅读:
    oracle-sql脚本
    vue生命周期
    使用vue搭建项目(创建手脚架)
    bootcss
    miniMobile(手机)
    mui(手机)
    layui
    Element
    如何学好Spring
    使用Vue做评论+localStorage存储(js模块化)
  • 原文地址:https://www.cnblogs.com/yzandy/p/12178898.html
Copyright © 2011-2022 走看看