返回首页 两个月精通 Shell 脚本

shell 学习三十七天----引用

引用

案例,如果我想输出一个星号 (*),使用 echo 如何做? echo *这是肯定不行的,需要将 * 转移,即:echo \*

这样就引出了引用的概念。所为引用,是用来防止 shell 将某些你想要的东西解释成不同的意义。如果你希望某些可能被 shell 视为个别参数的东西保持为单个参数,这时你就必须将其引用。

引用的三种方式:

  • 反斜杠转义
    • 字符前置反斜杠 (\),用来告知 shell 该字符即为其字面上的意义。
  • 单引号

    • 单引号 ('...') 强制 shell 将一对引号之间的所有字符都看做其字面上的意义。shell 脚本会删除这两个引号,只单独留下被括起来的完整文字内容:

      
      命令:echo 'here are some character * ? ` $ \'
      输出:here are some character * ? ` $ \
      不能再一个单引号引用的字符串里再内嵌一个单引号。即使是反斜杠,在单引号里也没有特殊意义 (某些系统里,像 echo ‘A\tB’这样的命令看起来像是 shell 特别的处理反斜杠,其实不然,这是 echo 命令本身有特殊的处理方式)```
    • 如需混用单引号和双引号,可以小心的使用反斜杠转义以及不同引用字符串的连接来做到:
      命令:echo 'he said"how'\''s tricks?"'
      输出:he said "how's tricks?"
      命令”echo "she replied ,\"movin'along\""
      输出:she replied ,"movin' along"
      不管怎么处理,这种结合方式永远是很难阅读的。
  • 双引号
    • 双引号 ('...') 就像单引号那样,将括起来的文字视为单一字符串。只不过,双引号会确切的处理括起来文字中的转义字符和变量,算术,命令替换:
      x=hahaha
      echo “$x”
      输出:hahaha
    • 在双引号里,字符 $,",' 与 \,如需用到字面上的意义,都必须前置 \。任何其他字符前面的反斜杠是不带特殊意义的。序列 \-newline 会完全的被删除,就好像是用在脚本里的正文中一样。单引号被括在双引号里时就无特殊意义了,他们不必承兑,也不许转移。
      命令:echo "hahah'"
      输出:hahah'

一般来说,使用单引号的时机是希望完全不处理的地方。否则,当希望将多个单词视为单一字符串,但又需要 shell 为你做些事情,此时使用双引号,例如将一个变量值与另一个变量值连在一起: oldvar="$oldvar $newvar"