引用
案例,如果我想输出一个星号(*),使用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”
版权声明:本文为博主原创文章,未经博主允许不得转载。