今天有个产品线人员说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. |
在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 |
单引号(' ')和双引号类似,但它不允许解释变量引用,因此,在单引号内的字符$的特殊意思无效了。在单引号内,除了字符',每个特殊字符都只是字面的意思。单引号(全局引用)比双引号(部分引用)更严格的处理引用部分。
由于在单引号里的转义字符(\)也只是被局限于字面上的意思,所以想在一双单引号里再加单引号是不行的。
|
注:
[1] |
除非当前目录下有一个文件名为first的文件。那这是引用的另外一个不同的理由了。(多谢 Harald Koenig指出这一点) |
|
[2] |
这也会使变量的值会有副作用。(看下面的) |
|
[3] |
在命令行上,把感叹号"!"放在双引号里执行命令会出错(译者注:比如说:echo "hello!"). 因为感叹号被解释成了一个历史命令. 然而在一个脚本文件里,这么写则是正确的,因为在脚本文件里Bash的历史机制被禁用了。 在双号号里在字符"\"也会引起许多不一致的行为。
(多谢Wayne Pollock指出这一点) |
|
[4] |
句子的分割,在这里是指分割一个字符串为许多不连续的单独的参数。 |
PS:
使用单引号可以阻止shell解释器编辑指令中的特殊字符或空格(shell使用空格决定提交给程序的独立的参数,特殊的shell字符在调用之前被展开)
相关推荐
除了单引号和双引号之外,还可以使用转义字符 `\` 来保护某些特殊字符不被shell解析。例如,如果你想在命令行中输入一个实际的美元符号 `$` 而不是作为变量前缀,可以使用转义字符: ```bash $ echo \$var $var ```...
10. **引用 (QOUTING)**:描述如何包围文本以防止特殊字符的解释,例如单引号`'`、双引号`"`和反引号`` ` ``。 11. **参数 (PARAMETERS)**:讨论Shell中的变量,包括位置参数、特殊参数和预定义变量。 12. **扩展 ...
在Linux Shell脚本编程中,理解单引号、双引号和反引号的作用至关重要,因为它们直接影响到命令行参数的解析方式。下面是对这些概念的详细解释。 **单引号**:在Shell中,单引号(' ')的作用是创建一个字符串,...
这里需要区分单引号和双引号的作用,单引号中的内容会被原样输出,而双引号中的特殊字符会被解释,例如`var="langis$LANG"`会被解释为"langisen_US"。 ulimit命令用于限制用户对系统资源的使用,比如可以打开的文件...
- **单引号**:`' '`,保护内部内容不被Shell解释。 - **双引号**:`" "`,允许变量和命令替换。 - **ANSI-C引用**:`$'string'`,用于引用包含控制字符的字符串。 - **locale特定翻译**:`$(catvar LC_COLLATE=...
- **Quoting(引号的使用)**:Bash支持不同类型的引号,用于保护字符串中的特殊字符不被shell解释,例如,单引号内的所有内容都被视为普通文本,而双引号允许某些变量扩展。 - **Comment(注释)**:Bash脚本中,...
- 在Bash或其他shell脚本中,单引号用于创建不进行变量替换或命令扩展的字符串,如 `'This is a $variable'` 会保持 `$variable` 不被解释。 - 转义单引号需要使用反斜杠 `\`,如 `'\''` 会在字符串中插入一个单...
单引号和双引号在 bash 中有不同的作用: - **单引号**:使用单引号可以防止 bash 对变量进行扩展。 - **双引号**:使用双引号会允许 bash 进行变量扩展和命令替换。 - **特殊字符**:某些字符如 `!` 在 bash 中...
在Linux Shell编程中,了解和掌握单引号、双引号、反引号和反斜杠的区别至关重要,因为它们在处理字符串和命令时起到不同的作用。 1. 单引号(' '): 单引号的作用是告诉Shell忽略其内部的所有特殊字符。这意味着...
- `mv <fileName> "stuff/newfileName"`:在存在空格的文件夹名称中使用双引号。 - `mv <folderName> <folderName2>`:重命名或移动目录。 - `mv <folderName>/..`:将目录上移至上一级目录结构。 - `touch ...
Bash Shell继承了早期的Bourne Shell(sh)的特点,并在此基础上增加了很多功能,使得它在交互式使用和脚本编程方面更为强大。 **1. Bash Shell基本概念** - **Shell脚本**:Shell脚本是一种类似于编程语言的文本...
4. 引号的使用:单引号`' '`和双引号`" "`对字符串有不同的处理方式,单引号内的内容不会进行变量替换。 5. Shell函数:可以创建自定义的函数,提高代码复用性。 6. 正则表达式:在某些命令中,如`grep`,支持正则...
你可以使用单引号(')或双引号(")来包围文本,区别在于单引号内的内容不会被Shell解析,而双引号内则可以解析变量。例如,如果你想输出包含变量$USER的信息,需要使用双引号:`echo "User info for userid: $USER"`。...
**Bash**(Bourne Again SHell)是Linux系统中广泛使用的命令行解释器之一,它基于早期的Bourne shell(sh),并增加了许多功能和改进。本文档主要介绍了Bash版本4.4的相关特性,该版本发布于2016年9月。 #### 二、...
- **转义字符:** 使用单引号或双引号来包含字符串,其中双引号内的变量会被展开。 - **格式化输出:** 可以使用`-n`选项来避免换行,如`echo -n "Today is: " ; date`。 #### 四、环境变量与用户自定义变量 环境...
3. 引号使用:单引号、双引号和未引号字符串的区别及其对特殊字符的处理。 4. 模式匹配:使用通配符(*,?,[ ])进行文件名扩展和模式匹配。 5. 别名和函数:自定义命令别名和自定义函数,方便快捷地执行常用命令。...
- 引用:为了保持变量值的完整性,可以使用双引号或单引号来引用变量。 - 退出与退出状态:脚本或命令执行完毕后,会返回一个退出状态,通常0表示成功,非0表示出现错误。 5. 测试 - 在脚本中,常常需要进行条件...
1. 变量命名规范:变量名以大写字母开头,多个单词之间使用下划线分隔。 2. 变量赋值:使用等号赋值,例如 `A=hello`。 3. 单引号赋值:使用单引号赋值,例如 `A='hello everyone'`。单引号不支持特殊字符。 4. 双...