`
xinklabi
  • 浏览: 1586469 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

linux bash shell 中的单引号和双引号(两个单引号之间不能使用单引号)

 
阅读更多

今天有个产品线人员说Linux无法写文件,因为字符串中有单引号,后来研究一下,发现最终实现的命令如下:

echo 'aaaaa'aaa'  >> temp.txt

原来两个单引号之间是强引用,任何特殊字符及转义字符都会是它本身的含义,但是两个单引号之间却不能有单引号存在,最后调整java代码使用下面的方式实现了

echo 'Why can'\''t I write '"'"'s between single quotes'

 

引用的文章如下:

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

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

   1 variable1="a variable containing five words"
   2 COMMAND This is $variable1    # 用下面7个参数执行COMMAND命令:
   3 # "This" "is" "a" "variable" "containing" "five" "words"
   4 
   5 COMMAND "This is $variable1"  # 用下面1个参数执行COMMAND命令:
   6 # "This is a variable containing five words"
   7 
   8 
   9 variable2=""    # 空字符串。
  10 
  11 COMMAND $variable2 $variable2 $variable2        # 没有带参数执行COMMAND 命令
  12 COMMAND "$variable2" "$variable2" "$variable2"  # 用三个含空字符串的参数执行COMMAND命令
  13 COMMAND "$variable2 $variable2 $variable2"      # 用一个包含两个空白符的参数执行COMMAND命令
  14 
  15 # Thanks, St閜hane Chazelas.
Tip

在echo语句中,只有句子分割和保存空白符的时候,才需要把参数用双引号引起来。.


例子 5-1. 引号引起奇怪的变量

   1 #!/bin/bash
   2 # weirdvars.sh: Echoing weird variables.
   3 
   4 var="'(]\\{}\$\""
   5 echo $var        # '(]\{}$"
   6 echo "$var"      # '(]\{}$"     和上面一句没什么不同.
   7 
   8 echo
   9 
  10 IFS='\'
  11 echo $var        # '(] {}$"     \字符被空白符替换了,为什么?
  12 echo "$var"      # '(]\{}$"
  13 
  14 # 以上例子由Stephane Chazelas提供..
  15 
  16 exit 0

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

Note

由于在单引号里的转义字符(\)也只是被局限于字面上的意思,所以想在一双单引号里再加单引号是不行的。

   1 echo "Why can't I write 's between single quotes"
   2 
   3 echo
   4 
   5 # The roundabout method.
   6 echo 'Why can'\''t I write '"'"'s between single quotes'
   7 #    |-------|  |----------|   |-----------------------|
   8 # 三个单引号引起的字符串之间有一个转义的单引号和一个由双引号引起的单引号.
   9 
  10 # 这个例子得到 St閜hane Chazelas同意.

注:

[1]

除非当前目录下有一个文件名为first的文件。那这是引用的另外一个不同的理由了。(多谢 Harald Koenig指出这一点)

[2]

这也会使变量的值会有副作用。(看下面的)

[3]

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

在双号号里在字符"\"也会引起许多不一致的行为。

 bash$ echo hello\!
 hello!
 
 
 bash$ echo "hello\!"
 hello\!
 
 
 
 
 bash$ echo -e x\ty
 xty
 
 
 bash$ echo -e "x\ty"
 x       y
 	      

(多谢Wayne Pollock指出这一点)

[4]

句子的分割,在这里是指分割一个字符串为许多不连续的单独的参数。

PS:

使用单引号可以阻止shell解释器编辑指令中的特殊字符或空格(shell使用空格决定提交给程序的独立的参数,特殊的shell字符在调用之前被展开)

Have a nice day!!!
分享到:
评论

相关推荐

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

    除了单引号和双引号之外,还可以使用转义字符 `\` 来保护某些特殊字符不被shell解析。例如,如果你想在命令行中输入一个实际的美元符号 `$` 而不是作为变量前缀,可以使用转义字符: ```bash $ echo \$var $var ```...

    linux bash shell中文手册

    10. **引用 (QOUTING)**:描述如何包围文本以防止特殊字符的解释,例如单引号`'`、双引号`"`和反引号`` ` ``。 11. **参数 (PARAMETERS)**:讨论Shell中的变量,包括位置参数、特殊参数和预定义变量。 12. **扩展 ...

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

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

    bash shell 详解

    这里需要区分单引号和双引号的作用,单引号中的内容会被原样输出,而双引号中的特殊字符会被解释,例如`var="langis$LANG"`会被解释为"langisen_US"。 ulimit命令用于限制用户对系统资源的使用,比如可以打开的文件...

    Bash shell编程参考手册

    - **单引号**:`' '`,保护内部内容不被Shell解释。 - **双引号**:`" "`,允许变量和命令替换。 - **ANSI-C引用**:`$'string'`,用于引用包含控制字符的字符串。 - **locale特定翻译**:`$(catvar LC_COLLATE=...

    linux bash手册(英文,version 4.2)

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

    给行文本添加单引号例子

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

    Bourne again shell (bash)

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

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

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

    Linux_bash_shell_cheat_sheetV2_2.pdf.pdf

    - `mv <fileName> "stuff/newfileName"`:在存在空格的文件夹名称中使用双引号。 - `mv <folderName> <folderName2>`:重命名或移动目录。 - `mv <folderName>/..`:将目录上移至上一级目录结构。 - `touch ...

    bash shell

    Bash Shell继承了早期的Bourne Shell(sh)的特点,并在此基础上增加了很多功能,使得它在交互式使用和脚本编程方面更为强大。 **1. Bash Shell基本概念** - **Shell脚本**:Shell脚本是一种类似于编程语言的文本...

    Linux Shell 参考文档

    4. 引号的使用:单引号`' '`和双引号`" "`对字符串有不同的处理方式,单引号内的内容不会进行变量替换。 5. Shell函数:可以创建自定义的函数,提高代码复用性。 6. 正则表达式:在某些命令中,如`grep`,支持正则...

    Linux-shell编程04

    你可以使用单引号(')或双引号(")来包围文本,区别在于单引号内的内容不会被Shell解析,而双引号内则可以解析变量。例如,如果你想输出包含变量$USER的信息,需要使用双引号:`echo "User info for userid: $USER"`。...

    linux脚本bash官方手册

    **Bash**(Bourne Again SHell)是Linux系统中广泛使用的命令行解释器之一,它基于早期的Bourne shell(sh),并增加了许多功能和改进。本文档主要介绍了Bash版本4.4的相关特性,该版本发布于2016年9月。 #### 二、...

    bash_shell笔记_1_脚本基础知识

    - **转义字符:** 使用单引号或双引号来包含字符串,其中双引号内的变量会被展开。 - **格式化输出:** 可以使用`-n`选项来避免换行,如`echo -n "Today is: " ; date`。 #### 四、环境变量与用户自定义变量 环境...

    Bash_reference_manual_2014_bashshell_源码.zip

    3. 引号使用:单引号、双引号和未引号字符串的区别及其对特殊字符的处理。 4. 模式匹配:使用通配符(*,?,[ ])进行文件名扩展和模式匹配。 5. 别名和函数:自定义命令别名和自定义函数,方便快捷地执行常用命令。...

    shell 高级bash脚本编程指导中文翻译版本

    - 引用:为了保持变量值的完整性,可以使用双引号或单引号来引用变量。 - 退出与退出状态:脚本或命令执行完毕后,会返回一个退出状态,通常0表示成功,非0表示出现错误。 5. 测试 - 在脚本中,常常需要进行条件...

    linux的Shell编程基础借鉴.pdf

    1. 变量命名规范:变量名以大写字母开头,多个单词之间使用下划线分隔。 2. 变量赋值:使用等号赋值,例如 `A=hello`。 3. 单引号赋值:使用单引号赋值,例如 `A='hello everyone'`。单引号不支持特殊字符。 4. 双...

Global site tag (gtag.js) - Google Analytics