首页 > 系统 > Linux > 正文

Shell编程 Bash引号的那点事

2019-10-26 18:44:48
字体:
来源:转载
供稿:网友

先了解下,在bash脚本中,有三种引号

1. 单引号 '
2. 双引号 "
3. 反引号 `

单引号
        两个单引号包围起来的字符串就是普通的字符串,它将保留原始的字面意思.
双引号
        两个双引号包围起来的字符串,部分特殊字符将起到它们的作用.
        这些特殊字符有: 美元符$, 反斜杠/, 反引号,  感叹号!.
反引号
        两个反引号包围起来的字符串,将作为命令来运行,
        执行的输出结果作为该反引号的内容,称为命令替换,
        它有另一种更好的写法: $(command)
我们来看几个例子,更直接的了解这三种引号的特性.

1. 美元符$在单、双引号中的表现: 在双引号中的$, 将发生变量引用, 而在单引号中的$, 将保留它的字面意思

代码如下:
igi@gentoo ~ $ echo '$HOME'
$HOME
igi@gentoo ~ $ echo "$HOME"
/home/igi

注: HOME为内部变量

2. 反斜杠/ 在单、双引号中的表现: 在双引号中的/, 将转义它后面的字符,使其具有特殊意义或者失去原来的特殊意义, 在单引号中的/, 将保留它的字面意思

代码如下:
igi@gentoo ~ $ echo '/$HOME'
/$HOME
igi@gentoo ~ $ echo "/$HOME"
$HOME

注: 双引号中的/,后面跟着$, 这里发生了转义,使得$失去特殊意义, 变成普通字符.

3. 反引号与其他两种引号的不同: 反引号包围起来的字符串将被运行,取其结果

代码如下:
igi@gentoo ~ $ echo 'date'
date
igi@gentoo ~ $ echo "date"
date
igi@gentoo ~ $ echo `date`
Fri Dec 3 18:34:09 CST 2010

注: 在反引号中的date被当成命令执行,包含的正是命令的输出信息

了解了他们的不同,我们来聊一聊常见的问题

1. 把反引号` 写 成单引号'

不得不说,它们长得确实很像,个别书的印刷字体区别度不高或者印刷质量不过关, 导致了很多新手认错,常把反引号`写成单引号'。如果你不知道反引号在哪,请看看Esc键下面的那个按键, 那个就是反引号。当然也不排除有些人看书不注意,这也是常有的事。只要我们明白了反引号与单引号作用的区别,什么时候要用单引号,什么时候要用反引号就一 清二楚了。当你需要一个字符串时,使用单引号; 而当你需要捕捉命令的输出时,请用反引号。

2. 总是忘了加双引号
双引号不总是多余的,被它包围的数据变得很安全,不至于被bash切开对待。

代码如下:
igi@gentoo ~ $ seq 3
1
2
3
igi@gentoo ~ $ echo `seq 3`

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表