`

Bash, 双引号,单引号,感叹号

 
阅读更多

当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名[2]前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。[3] 用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。

用双引号还能使句子不被分割开. [4] 一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不会被shell分割开了。

 

单引号(' ')和双引号类似,但它不允许解释变量引用,因此,在单引号内的字符$的特殊意思无效了。在单引号内,除了字符',每个特殊字符都只是字面的意思。单引号(全局引用)比双引号(部分引用)更严格的处理引用部分。

 

感叹号(!)称之为事件指示器 (event designator) ,用以对.bash_history中的某个命令行条目的引用。

!!     引用上一条命令。这是 `!-1' 的同义词。
!string
引用最近的以 string 开始的命令。
!?string[?]

引用最近的包含 string 的命令。尾部的 ? 可以被忽略,如果 string 之后紧接着一个新行符。

 

在命令行上,把感叹号"!"放在双引号里执行命令会出错(译者注:比如说:echo "hello!"). 因为感叹号被解释成了一个历史命令. 然而在一个脚本文件里,这么写则是正确的,因为在脚本文件里Bash的历史机制被禁用了

root@test-desktop:/home/James/mypro/Linux-Pro/Network# !!

ls

hostname_to_ip  hostname_to_ip.c  hostname_to_ip.c~  ip_to_hostname  ip_to_hostname.c  ip_to_hostname.c~  Makefile  Makefile~

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$CLASSPATH"

.:/lib:/opt/jdk1.5.0_22/jre/lib:

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$CLASSPATH'

$CLASSPATH

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(ls)"

hostname_to_ip

hostname_to_ip.c

hostname_to_ip.c~

ip_to_hostname

ip_to_hostname.c

ip_to_hostname.c~

Makefile

Makefile~

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$(ls)'

$(ls)

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"

-bash: !: event not found

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '!'

!

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo !

!

root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls

hostname_to_ip  hostname_to_ip.c  hostname_to_ip.c~  ip_to_hostname  ip_to_hostname.c  ip_to_hostname.c~  Makefile  Makefile~

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"

-bash: !: event not found

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!!"

echo "ls"

ls

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"

echo "$(echo "ls")"

ls

root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls

hostname_to_ip  hostname_to_ip.c  hostname_to_ip.c~  ip_to_hostname  ip_to_hostname.c  ip_to_hostname.c~  Makefile  Makefile~

root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"

echo "$(ls)"

hostname_to_ip

hostname_to_ip.c

hostname_to_ip.c~

ip_to_hostname

ip_to_hostname.c

ip_to_hostname.c~

Makefile

Makefile~

 

root@test-desktop:/home/James/mypro/Linux-Pro/Network# 

 

shell中单引号、双引号和两个双引号的区别,看下面的例子:

 

[root@test] a=55[root@test] echo $a
55[root@test] echo '$a'
$a
[root@test] echo ''$a''#注意此处是两个单引不是一个双引55

由上面的例子不难看出,双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不对的输出

 

 

,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里的负负为正。

 

 

 

 

 

分享到:
评论

相关推荐

    linux系统中单引号和双引号的区别

    在Linux系统中,无论是命令行操作还是脚本编程,正确地使用单引号(`'`)和双引号(`"`)是非常重要的。这两种引号在处理字符串时有着不同的规则和用途,理解它们之间的差异能够帮助我们更高效、更准确地执行命令或...

    给行文本添加单引号例子

    - 在Bash或其他shell脚本中,单引号用于创建不进行变量替换或命令扩展的字符串,如 `'This is a $variable'` 会保持 `$variable` 不被解释。 - 转义单引号需要使用反斜杠 `\`,如 `'\''` 会在字符串中插入一个单...

    Shell编程 Bash引号的那点事

     这些特殊字符有: 美元符$, 反斜杠\, 反引号, 感叹号!. 反引号  两个反引号包围起来的字符串,将作为命令来运行,  执行的输出结果作为该反引号的内容,称为命令替换,  它有另一种更好的写法: $(command) 我们...

    Bourne again shell (bash)

    单引号和双引号在 bash 中有不同的作用: - **单引号**:使用单引号可以防止 bash 对变量进行扩展。 - **双引号**:使用双引号会允许 bash 进行变量扩展和命令替换。 - **特殊字符**:某些字符如 `!` 在 bash 中...

    每天一个Linux命令之shell单引号和双引号的经典解释

    在Linux Shell脚本编程中,理解单引号、双引号和反引号的作用至关重要,因为它们直接影响到命令行参数的解析方式。下面是对这些概念的详细解释。 **单引号**:在Shell中,单引号(' ')的作用是创建一个字符串,...

    linux shell中单引号、双引号、反引号、反斜杠的区别

    在Linux Shell编程中,了解和掌握单引号、双引号、反引号和反斜杠的区别至关重要,因为它们在处理字符串和命令时起到不同的作用。 1. 单引号(' '): 单引号的作用是告诉Shell忽略其内部的所有特殊字符。这意味着...

    详解Bash命令行处理

    在Bash中,双引号和单引号有着不同的作用: - **双引号**:被双引号包围的字符串会被解析,其中的变量和命令会被替换。 - **单引号**:被单引号包围的字符串会被视为字面量,不会发生变量或命令替换。 #### 三、`...

    bash-Reference-Manual.pdf

    引号分为三种类型:单引号、双引号和ANSI-C引用。单引号会阻止其中的任何字符被解释,包括变量扩展、通配符、命令替换等。双引号则允许部分扩展,例如变量扩展和命令替换仍然有效,但其他特殊字符如通配符则不会被...

    bash入门学习实例

    - 双引号`" "`:保留变量,但特殊字符如`$`,``会进行解析。 - 不加引号:变量和特殊字符都会被解析。 ### 10. 输入/输出重定向 - `>&`:合并标准输出和错误输出。 - `复制文件描述符。 - `这里字符串(heredoc)...

    bash快速入门,适合新手

    当变量名被放在双引号内时,Bash会进行变量扩展,即用变量的实际值替换掉变量名,然后再执行命令。 #### 三、深入理解变量 在任何编程语言中,变量都是不可或缺的一部分,它们用于存储数据并在程序的不同部分使用...

    Bash Reference Manual.pdf --- Bash手册

    例如,单引号表示字符串将被原样输出,而双引号则允许变量扩展和命令替换。 3. 评论:在 Bash 脚本中,可以使用 `#` 符号添加注释,帮助解释脚本的逻辑和目的,这对于维护和调试非常重要。 四、Shell 命令 1. ...

    Linux中高效编写Bash脚本的9个技巧

    在Bash脚本中,使用双引号来引用变量是非常重要的,因为它可以帮助避免因空格引起的单词分割问题,以及不必要的模式匹配。例如: ```bash #!/bin/bash names="Tecmint FOSSMint Linusay" # 不使用双引号 for name ...

    Bash参考手册.pdf

    Bash参考手册.pdf是Bash shell的官方参考手册,涵盖了Bash shell的所有方面,包括基本语法、变量、命令、函数、文件处理、流程控制、输入输出、错误处理等。 1. Bash简介 Bash是GNU项目的一部分,是自由软件基金会...

    bash cookbook

    《Bash Cookbook》深入探讨了单引号(`'`)、双引号(`"`)和反斜杠(`\`)的用法,以及它们如何帮助避免解释器错误和实现复杂的字符串操作。 #### 7. 使用或替换内置命令和外部命令(Using or Replacing Built-ins...

    bash教程-命令语法

    - `e='hello from "霍格沃兹测试学院"'` 使用单引号定义变量,即使包含双引号也不会被特殊解析。 - `f=`ls`` 通过反引号将`ls`命令的结果赋值给变量`f`。 变量调用时需使用前缀`$`,例如`echo $a`打印变量`a`的值。...

    bash programming

    - **引用**:使用单引号(`'`)或双引号(`"`)来引用字符串,不同引用方式对变量展开有不同影响。 - **测试**:使用`[ ]`或`[[ ]]`来进行条件测试,支持文件测试操作符、数值比较等。 - **操作与相关主题**:包括算术...

    linux bash手册(英文,version 4.2)

    - **Quoting(引号的使用)**:Bash支持不同类型的引号,用于保护字符串中的特殊字符不被shell解释,例如,单引号内的所有内容都被视为普通文本,而双引号允许某些变量扩展。 - **Comment(注释)**:Bash脚本中,...

    Bash脚本编写中遇到的问题

    此外,忘记在命令结尾添加大括号`{}`或双引号`""`也可能导致语法错误。解决这类问题的关键在于熟练掌握Bash语法规则,并使用良好的代码风格,如适当缩进和注释。 其次,逻辑错误往往涉及到条件判断和循环结构。比如...

    bash官方手册/Bash Reference Manual

    "bash 官方手册/Bash Reference Manual" bash 官方手册是 GNU 项目的一部分,由 Chet Ramey 和 Brian Fox 编写,提供了 Bash shell 的详细参考手册。该手册涵盖了 Bash shell 的所有方面,包括基本语法、shell ...

Global site tag (gtag.js) - Google Analytics