引号和转义 您所在的位置:网站首页 here文档 引号和转义

引号和转义

2023-06-17 13:14| 来源: 网络整理| 查看: 265

引号和转义转义单引号双引号Here 文档Here 字符串引号和转义

Bash 只有一种数据类型,就是字符串。不管用户输入什么数据,Bash 都视为字符串。因此,字符串相关的引号和转义,对 Bash 来说就非常重要。

转义

某些字符在 Bash 里面有特殊含义(比如$、&、*)。

$ echo $date$

上面例子中,输出$date不会有任何结果,因为$是一个特殊字符。

如果想要原样输出这些特殊字符,就必须在它们前面加上反斜杠,使其变成普通字符。这就叫做“转义”(escape)。

$ echo \$date$date

上面命令中,只有在特殊字符$前面加反斜杠,才能原样输出。

反斜杠本身也是特殊字符,如果想要原样输出反斜杠,就需要对它自身转义,连续使用两个反斜线(\\)。

$ echo \\\

上面例子输出了反斜杠本身。

反斜杠除了用于转义,还可以表示一些不可打印的字符。

\a:响铃\b:退格\n:换行\r:回车\t:制表符

如果想要在命令行使用这些不可打印的字符,可以把它们放在引号里面,然后使用echo命令的-e参数。

$ echo a\tbatb$ echo -e "a\tb"a b

上面例子中,命令行直接输出不可打印字符,Bash 不能正确解释。必须把它们放在引号之中,然后使用echo命令的-e参数。

由于反斜杠可以对换行符转义,使得 Bash 认为换行符是一个普通字符,从而可以将一行命令写成多行。

$ mv \/path/to/foo \/path/to/bar# 等同于$ mv /path/to/foo /path/to/bar

上面例子中,如果一条命令过长,就可以在行尾使用反斜杠,将其改写成多行。这是常见的多行命令的写法。

单引号

Bash 允许字符串放在单引号或双引号之中,加以引用。

单引号用于保留字符的字面含义,各种特殊字符在单引号里面,都会变为普通字符,比如星号(*)、美元符号($)、反斜杠(\)等。

$ echo '*'*$ echo '$USER'$USER$ echo '$((2+2))'$((2+2))$ echo '$(echo foo)'$(echo foo)

上面命令中,单引号使得 Bash 扩展、变量引用、算术运算和子命令,都失效了。如果不使用单引号,它们都会被 Bash 自动扩展。

由于反斜杠在单引号里面变成了普通字符,所以如果单引号之中,还要使用单引号,不能使用转义,需要在外层的单引号前面加上一个美元符号($),然后再对里层的单引号转义。

# 不正确$ echo it's# 不正确$ echo 'it\'s'# 正确$ echo $'it\'s'

不过,更合理的方法是改在双引号之中使用单引号。

$ echo "it's"it's 双引号

双引号比单引号宽松,可以保留大部分特殊字符的本来含义,但是三个字符除外:美元符号($)、反引号(` )和反斜杠(\)。也就是说,这三个字符在双引号之中,会被 Bash 自动扩展。

$ echo "*"*

上面例子中,通配符*放在双引号之中,就变成了普通字符,会原样输出。这一点需要特别留意,双引号里面不会进行文件名扩展。

$ echo "$SHELL"/bin/bash$ echo "`date`"Mon Jan 27 13:33:18 CST 2020

上面例子中,美元符号和反引号在双引号中,都保持特殊含义。美元符号用来引用变量,反引号则是执行子命令。

$ echo "I'd say: \"hello!\""I'd say: "hello!"$ echo "\\"\

上面例子中,反斜杠在双引号之中保持特殊含义,用来转义。所以,可以使用反斜杠,在双引号之中插入双引号,或者插入反斜杠本身。

由于双引号将换行符解释为普通字符,所以可以利用双引号,在命令行输入多行文本。

$ echo "helloworld"helloworld

上面命令中,Bash 正常情况下会将换行符解释为命令结束,但是换行符在双引号之中就是普通字符,所以可以输入多行。echo命令会将换行符原样输出,显示的时候正常解释为换行。

双引号的另一个常见的使用场合是,文件名包含空格。这时就必须使用双引号,将文件名放在里面。

$ ls "two words.txt"

上面命令中,two words.txt是一个包含空格的文件名,否则就会被 Bash 当作两个文件。

双引号会原样保存多余的空格。

$ echo "this is a test"this is a test

双引号还有一个作用,就是保存原始命令的输出格式。

# 单行输出$ echo $(cal)一月 2020 日 一 二 三 四 五 六 1 2 3 ... 31# 原始格式输出$ echo "$(cal)" 一月 2020日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

上面例子中,如果$(cal)不放在双引号之中,echo就会将所有结果以单行输出,丢弃了所有原始的格式。

Here 文档

Here 文档(here document)是一种输入多行字符串的方法,格式如下。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有