美文网首页
Shell中的特殊字符

Shell中的特殊字符

作者: echo_1992 | 来源:发表于2017-04-20 22:04 被阅读0次

    Shell的预处理

    当我们在shell中敲击命令按下enter键时,其实bash在这些命令字符送到命令前做了一些处理,这些处理叫expansion,比如“*”字符在shell命令行中有很多意义。在命令行enter后,这些特殊字符将会扩展成另外的一些东西。
    echo是shell內建的程序,打印出该命令的参数到stdout。但是如果是echo *,命令将不是打印出*而是另外一些东西。shell在echo命令执行之前将*扩展成了另外的东西。

    1. 通配符“*”的工作机制被称为pathname expansion。


      通配符*
    2. ”在单词前扩展为该单词名称的家目录,如syl。
      ~家目录
    3. “$”是算术扩展。echo $((expression)),可以嵌套。echo $((2 + 2));echo $(($((5**2)) * 3))。
      $算术扩展
    4. {}花括号扩展。可以根据花括号中的模型pattern创建多个text字符串


      花括号扩展
    5. 参数扩展parameter expansion。在系统中存储着一些有名字的数据集,实际上这些数据集叫做变量。echo $USER显示USER变量的内容。想要知道可用的变量列表可以printenv | less。


      变量扩展
    6. 命令替换。可以让我们使用一个命令的输出作为另一个命令的参数。


      命令替换

    引号的使用

    出现问题
    • 忽略了参数中多余的空格
    • 由于$1是一个没有定义的变量所以为空字符

    引号的出现解决这些问题。

    双引号

    将字符放在双引号内,shell中那些拥有特有含义的字符就失去了这些特殊含义,只是普通的字符文本,但是其中“$”“\”“`”三个例外。


    出现问题

    ls命令会认为这是两个参数。用ls -l "two words.txt"就可以去除空格的影响,修复mv "two words.txt" two_words.txt。然而$依然可用,echo "$USER $((2 + 2)) $(cal)"。


    $依然可用
    通常,单词分割是根据空格space,制表符tab,换行newlines这些单词间的分隔符。这就是说,没有在引号内的spaces,tabs,newlines并不是文本的一部分,他们只是分隔符,因此就变成了多个命令参数。加上双引号就取消了这些分隔符的意义,变成一个参数。
    分隔符

    单引号

    为了消除所有的expansion,使用单引号

    单引号

    转义字符

    通常在双引号中出现的消除特殊含义的扩展。

    相关文章

      网友评论

          本文标题:Shell中的特殊字符

          本文链接:https://www.haomeiwen.com/subject/byfrzttx.html