本文介绍: bash引用-Quoting详细介绍概述引用的字面意思就是,用引号括住一个字符串。这可以保护字符串中的特殊字符不被shell或shell脚本重新解释或扩展。(如果一个字有不同于其字面意思的解释,它就是“特殊的”。例如:星号除了本身代表号以外还表示文件通配和正则表达式中的通配符)。Pictures:total 0Public:total 0在生活中用语或者书写,当我们使用双引号”引用“一个句子时,我们会区别对待该句子并赋予其特殊意义;
bash引用-Quoting详细介绍
概述
引用的字面意思就是,用引号括住一个字符串。这可以保护字符串中的特殊字符不被shell或shell脚本重新解释或扩展。(如果一个字有不同于其字面意思的解释,它就是“特殊的”。例如:星号除了本身代表号以外还表示文件通配和正则表达式中的通配符)。
[root@centos8 ~]$ ls -l P*
Pictures:
total 0
Public:
total 0
[root@centos8 ~]$ ls -l ‘P*’
ls: cannot access ‘P*’: No such file or directory
在生活中用语或者书写,当我们使用双引号”引用”一个句子时,我们会区别对待该句子并赋予其特殊意义;在Bash脚本中,当我们使用双引号”string“引用一个字符串时,我们同样区别对待并保护其字面意思(一般性的意思)。
在涉及到命令替换时,引用可以让echo输出带格式的命令结果,保留变量所带的空白符号。
bash$ echo KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 25: … #̲ 无引号命令替换 total … echo “KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 24: … #̲ 被引用的命令替换 total…、反引号`、和反斜杠仍然会被bash解析)。在双引号中的
(
”
输出
one
two
three
输出
one two three
“This” “is” “a” “variable” “containing” “five” “words”
“This is a variable containing five words”
谢谢这个大佬指出:Stéphane Chazelas.
weirdvars.sh: Echoing weird variables.
以上例子来自Stephane Chazelas.
但是 … var2=“\”” 是非法的?(此处四个,位置2,4的两个刚好被转义,而剩余3个”符,所以不行)
但是强引用可以.
************************************************************
变量嵌套替换也可以
^ ^
某些情况下嵌套很有用
^ ^
Or, as Chris Hiestand points out …
^ ^ ^ ^ ^ ^ ^ ^
************************************************************
The roundabout method.
|——-| |———-| |———————–|
上面使用了三个单引号组;一个转义的单引号和一个双引号引起的单引号.
escaped.sh: escaped characters
First, let’s show some basic escaped-character usage.
Escaping a newline.
——————
上面的写法将会打印两行
上面的写法将会打印一行
使用 -e 选项 打印转义字符所代表的字符
使用该结构 $‘X’ 使得-e选项不在需要
We have seen $’nnn” string expansion, and now . . .
===================================================================
$‘nnn’ 该种字符串展开的机制在bash2.0中引进
===================================================================
‘nnn’ 为八进制数.
将一个ASCII字符赋值给一个变量
—————————————-
Concatenating ASCII chars in a variable.
并无可视化的输出.
Author: Sigurd Solaas, 20 Apr 2011
Used in ABS Guide with permission.
Requires version 4.2+ of Bash.
Convert the separate home–key to home–key_num_7:
Quoted string-expansion construct.
Convert the separate end–key to end–key_num_1.
Whereas . . .
However . . .
These examples supplied by Stéphane Chazelas.
不可行,打印一个错误提示:
test.sh: : command not found
单独一个转义字符不可赋给变量
事实上此处转义字符 “” 转义了新行(在编写比较长的命令时就可以使用一个转义符来将命令写成多行)
^ 转义符后跟一个空格
行不通,出错:
test.sh: : command not found
上面三个转义符中,第一个转义可第二个,但是第三个转义符还在,类似于第一个例子。
List of files as argument(s) to a command.
Add two files to the list, and list all.
What happens if we escape a couple of spaces?
Error: the first three files concatenated into a single argument to ‘ls -l’
because the two escaped spaces prevent argument (word) splitting.
该命令为Alan Cox写的拷贝命令,作两行写,增加了易读性。
下面的命令同样功能:
See note below.
(Thanks, Stéphane Chazelas.)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。