首页 运维 linux运维 总结bash中常用特殊字符

总结bash中常用特殊字符

Aug 17, 2017 am 10:31 AM
bash 字符

#

注释符号(Hashmark)

1.在shell文件的行首,作为shell调用解释器标记,#!/bin/bash;

2. 在配置文件中作为注释使用,在一行中,#后面的内容并不会被执行

;

作为多命令的分隔符(Command separator [semicolon])。

多个命令要放在同一行的时候,可以使用分号分隔。

;;

连续分号(Terminator [double semicolon])。

在使用case选项的时候,作为每个选项的终结符。

.

点号(dot command)。

1. 执行当前目录文件

         #!/bin/bash

         .pythontab-file

2. 作为文件名的一部分,在文件名的开头,表示该文件为隐藏文件

3. 作为目录名,一个点代表当前目录,两个点号代表上层目录(当前目录的父目录)。注意,两个以上的点不出现,除非你用引号(单/双)包围作为点号字符本身;

4. 正则表达式中,点号表示任意一个字符。

"

双引号(double quotation marks)。

部分引用。双引号包围的内容可以允许变量扩展,也允许转义字符的存在。

'

单引号(full quoting [single quote])。

单引号括住的内容,所有字符均作为字符本身处理,

逗号(comma operator [comma])。

1. 用在连接一连串的数学表达式中,这串数学表达式均被求值,但只有最后一个求值结果被返回。如:

         #!/bin/bash

         lett1=((a=5+1, b=7+2))

         echot1=$t1, a=$a, b=$b

         ##这个$t1=$b;

\

反斜线,反斜杆(escape [backslash])。

1. 放在特殊符号之前,转义特殊符号的作用,仅表示特殊符号本身,这在字符串中常用;

2. 放在一行指令的最末端,表示紧接着的回车无效(其实也就是转义了Enter),后继新行的输入仍然作为当前指令的一部分。

/

斜线,斜杆(Filename path separator [forward slash])。

1.作为路径的分隔符,路径中仅有一个斜杆表示根目录,以斜杆开头的路径表示从根目录开始的路径;

2.在作为运算符的时候,表示除法符号。如:a=4/2

`

反引号,后引号(Command substitution[backquotes])。

命令替换。这个引号包围的为命令,可以执行包围的命令,并将执行的结果赋值给变量。如:a=`dirname '/tmp/x.log'` 。后面dirname返回的结果会赋值给a,注意,此处Mitchell特地使用了反引号和单引号,注意区别。

:

冒号(null command [colon])。

空命令,这个命令什么都不做,但是有返回值,返回值为0(即:true)。这个命令的作用非常奇妙。

1. 可做while死循环的条件;

2. 在if分支中作为占位符(即某一分支什么都不做的时候);

3. 放在必须要有两元操作的地方作为分隔符,如::${username=`whoami`}

4. 在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用;

5. 甚至你可以用来注释(#后的内容不会被检查,但:后的内容会被检查,如果有语句如果出现语法错误,则会报错);

6. 你也可以作为域分隔符,比如环境变量$PATH中,或者passwd中,都有冒号的作为域分隔符的存在;

7. 你也可以将冒号作为函数名,不过这个会将冒号的本来意义转变(如果你不小心作为函数名,你可以使用unset -f : 来取消function的定义)。

!

感叹号(reverse (or negate) [bang],[exclamation mark])。

取反一个测试结果或退出状态。

1. 表示反逻辑,比如后面的!=,这个是表示不等于;

2. 表示取反,如:ls a[!0-9] #表示a后面不是紧接一个数字的文件;

3. 在不同的环境里面,感叹号也可以出现在间接变量引用里面;

4. 在命令行中,可以用于历史命令机制的调用,你可以试试!$,!#,或者!-3看看,不过要注意,这点特性不能在脚本文件里面使用(被禁用)。

*

星号(wildcard/arithmetic operator[asterisk])。

1. 作为匹配文件名扩展的一个通配符,能自动匹配给定目录下的每一个文件;

2. 正则表达式中可以作为字符限定符,表示其前面的匹配规则匹配任意次;

3. 算术运算中表示乘法。

**

双星号(double asterisk)。算术运算中表示求幂运算。

?

问号(test operator/wildcard[Question mark])。

1. 表示条件测试;

2. 在双括号内表示C风格的三元操作符((condition?true-result:false-result));

3. 参数替换表达式中用来测试一个变量是否设置了值;

4. 作为通配符,用于匹配文件名扩展特性中,用于匹配单个字符;

5. 正则表达式中,表示匹配其前面规则0次或者1次。

$

美元符号(Variable substitution[Dollar sign])。

1. 作为变量的前导符,用作变量替换,即引用一个变量的内容,比如:echo $PATH;

2. 在正则表达式中被定义为行末(End ofline)。

${}

参数替换(Variable substitution)。

用于在字符串中表示变量。

$‘...’

引用内容展开,执行单引号内的转义内容(单引号原本是原样引用的),这种方式会将引号内的一个或者多个[\]转义后的八进制,十六进制值展开到ASCII或Unicode字符。

$*

$@

位置参数(Positional Parameters)。

这个在使用脚本文件的时候,在传递参数的时候会用到。两者都能返回调用脚本文件的所有参数,但$*是将所有参数作为一个整体返回(字符串),而$@ 是将每个参数作为单元返回一个参数列表。注意,在使用的时候需要用双引号将$*,$@括住。这两个变量受到$IFS的影响,如果在实际应用中,要考虑其中的一些细节。

$#

表示传递给脚本的参数数量。

$?

此变量值在使用的时候,返回的是最后一个命令、函数、或脚本的退出状态码值,如果没有错误则是0,如果为非0,则表示在此之前的最后一次执行有错误。

$$

进程ID变量,这个变量保存了运行当前脚本的进程ID值。

()

圆括号(parentheses)。

1, 命令组(Command group)。由一组圆括号括起来的命令是命令组,命令组中的命令实在子shell(subshell)中执行。因为是在子shell内运行,因此在括号外面是没有办法获取括号内变量的值,但反过来,命令组内是可以获取到外面的值,这点有点像局部变量和全局变量的关系,在实作中,如果碰到要cd到子目录操作,并在操作完成后要返回到当前目录的时候,可以考虑使用subshell来处理;

2. 用于数组的初始化。

{x,y,z,...}

花括号扩展(Brace Expansion)。

在命令中可以用这种扩展来扩展参数列表,命令将会依照列表中的括号分隔开的模式进行匹配扩展。注意的一点是,这花括号扩展中不能有空格存在,如果确实有必要空格,则必须被转义或者使用引号来引用。例子:echo {a,b,c}-{\ d," e",' f'}

{a..z}

在Bash version 3时添加了这种花括号扩展的扩展,可以使用{A..Z}表示A-Z的所有字符列表,这种方式的扩展Mitchell测试了一下,好像仅适用于A-Z,a-z,还有数字{最小..最大}的这种方式扩展。

{}

代码块(curly brackets)。

这个是匿名函数,但是又与函数不同,在代码块里面的变量在代码块后面仍能访问。注意:花括号内侧需要有空格与语句分隔。另外,在xargs -i中的话,还可以作为文本的占位符,用以标记输出文本的位置。

{} \;

这个{}是表示路径名,这个并不是shell内建的,现在接触到的情况看,好像只用在find命令里。注意后面的分号,这个是结束find命令中-exec选项的命令序列,在实际使用的时候,要转义一下以免被shell理解错误。

[]

中括号(brackets)。

1. 测试的表示,Shell会测试在[]内的表达式,需要注意的是,[]是Shell内建的测试的一部分,而非使用外部命令/usr/bin/test的链接;

2. 在数组的上下文中,表示数组元素,方括号内填上数组元素的位置就能获得对应位置的内容,如:

1.      Array[1]=xxx

2.      echo${Array[1]};

3. 表示字符集的范围,在正表达式中,方括号表示该位置可以匹配的字符集范围。

[[]]

双中括号(double brackets)。

这个结构也是测试,测试[[]]之中的表达式(Shell的关键字)。这个比单中括号更能防止脚本里面的逻辑错误,比如:&&,||,<,>操作符能在一个[[]]里面测试通过,但是在[]却不能通过。[[]]里面没有文件名扩展(filename expansion)或是词分隔符(Word splitting),但是可以用参数扩展(Parameter expansion)和命令替换(command substitution)。不用文件名通配符和像空白这样的分隔符。注意,这里面如果出现了八进制,十六进制等,shell会自动执行转换比较。

$[...]

词表达表示整数扩展(integer expansion)。

在方括号里面执行整数表达式。例:

1.      a=3

2.      b=7

3.      echo$[$a+$b]

4.      echo$[$a*$b]

5.      ##返回是10和21

(())

双括号(double parentheses)。

表示整数扩展(integer expansion)。

在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。

在双括号结构中,所有变量可以不加入:“$”符号前缀。

双括号可以进行逻辑运算,四则运算

双括号结构扩展了for,while,if条件测试运算

支持多个表达式运算,各个表达式之间用“,”分开

 

&<

>&

>> 

<

<> 

重定向(redirection)。

scriptname >filename 重定向scriptname的输出到文件filename中去,如果filename文件存在则覆盖原来文件;

command &>filename 重定向command的标准输出(stdout)和标准错误(stderr)到文件filename中;

command >&2 把command的标准输出(stdout)重定向到标准错误(stderr)中;

scriptname >>filename 把scriptname的输出(同>)追加到文件filename中,如果文件不存在则创建。一个>表示文件存在就覆盖,不存在就创建,两个>>表示不存在就创建,存在就在原有基础上增加

[i]<>filename 打开filename这个文件用来读或者写,并且给文件指定i为它的文件描述符(file descriptor),文件不存在就会创建。

<<

双小于号(here-document[double less then marks])。

这个也被称为Here-document,用来将后继的内容重定向到左侧命令的stdin中。<<可以节省格式化时间,别且使命令执行的处理更容易。在实作的时候只需要输入<<和终止标志符,而后(一般是回车后)你就可以输入任何内容,只要在最后的新行中输入终止标志符,即可完成数据的导入。使用here-document的时候,你可以保留空格,换行等。如果要让shell脚本更整洁一点,可以在<<和终止符之间放上一个连字符(-)。

<<<

三个小于号(here-strings)。Here-字串和Here-document类似,here-strings语法:command [args] <<<["]$word["];$word会展开并作为command的stdin。

\<...\>

词界符(word boundary)。

这个是用在正则表达式中的一个特殊分隔符,用来标记单词的分界。比如:the会匹配there,another,them等等,如果仅仅要匹配the,就可以使用这个词界符,\就只能匹配the了。

|

管道(pipe)。管道是Linux,Unix都有的概念,是非常基础,也是非常重要的一个概念。它的作用是将管道前(左边)的命令产生的输出(stdout)作为管道后(右边)的命令的输入(stdin)。如:ls | wc l,使用管道就可以将命令连接在一起。注意:管道是每一个进程的标准输出都会作为下一个命令的标准输入,期间的标准输出不能跨越管道作为后继命令的标准输入,如: cat filename | ls -al | sort 。想想这个的输出? 同时,管道是以子进程来运行的,所以管道并不能引起变量改变。

>|

强制重定向(force redirection)。

这会强制重写已经存在的文件。

&

与号(Run job in background[ampersand])。

如果命令后面跟上一个&符号,这个命令将会在后台运行。

&&

||

逻辑操作符(logical operator)。

在测试结构中,可以用这两个操作符来进行连接两个逻辑值。||是当测试条件有一个为真时返回0(真),全假为假;&&是当测试条件两个都为真时返回真(0),有假为假。

-

减号,连字符(Hyphen/minus/dash)。

1. 作为选项,前缀[option,prefix]使用。

2. 用于stdin或者stdout的重定向的源或目的[dash].在tar没有bunzip2的程序补丁时,我们可以这样: bunzip2 linux-2.6.13.tar.bz2 | tar xvf - 。将前面解压的数据作为tar的标准输入(这里使用一个-表示)

注意:在实作的时候,如果文件名是以[-]开头的,那么在加上这个作为定向操作符的时候,可能会出错,此时应该为文件加上合适的前缀路径,以避免这种情况发生,同样的,在echo变量的时候,如果变量是以[-]开始,那么可能也会产生意想不到的结果,为了保险起见,可以使用双引号引用标量:

         var="-n"

         echo$var

         ##试试看有什么输出?

还有,这种表示方法不是Bash内建的,要达到此点的这种效果,需要看你使用的软件是否支持这种操作;

3. 表示先前的工作目录(previousworking directory),因此,如果你cd到其他目录下要放回前一个路径的时候,可以使用cd -来达到目的,其实,这里的[-]使用的是环境变量的$OLDPWD,注意:这里的[-]和前一点是不同的;

4. 减号或者负号,用在算术操作中。

=

等号(Equals)。

1. 赋值操作,给变量赋值,么有空格在等号两侧;

2. 在比较测试中作为比较符出现,这里要注意,如果在中括号中作为比较出现,需要有空格符在等号左右两侧。

+

加号(Plus)。

1. 算术操作符,表示加法;

2. 在正则表达式中,表示的是其前的这个匹配规则匹配最少一次;

3.在命令或过滤器中作为选项标记,在某些命令或者内置命令中使用+来启用某些选项,使用-来禁止;

4. 在参数替换(parametersubstitution)中,+前缀表示替代值(当变量为空的时候,使用+后面的值)

%

百分号(modulo[percent sign])。

1.在算术运算中,这个是求模操作符,即两个数进行除法运算后的余数;

2. 在参数替换(parametersubstitution)中,可以作为模式匹配。例子:

         p=b*9

         var="abcd12345abc479"

         echo${var%p}, ${var%%p}

         ##从右边开始查找(想想从左是那个符号?)

         ##任何在b和9之间的内容(含)

         ##第一个是找到最短的符合匹配项

         ##后一个是找最大符合的匹配项(贪婪匹配?)

~

波浪号(Home directory[tilde])。

这个和内部变量$HOME是一样的。默认表示当前用户的家目录(主目录),这个和~/效果一致,如果波浪号后面跟用户名,表示是该用户的家目录。

^

脱字符(caret)。

1. 在正则表达式中,作为一行的行首(beginning-of-line)位置标志符;

2. 在参数替换(Parametersubstitution)中,这个用法有两种,一个脱字符(${var^}),或两个(${var^^}),分别表示第一个字母大写,全部大写的意思(Bash version >=4)。

空白

空白符(Whitespace)。

空白符不仅仅是指空格(spaces),还包括制表符(tabs),空行(blank lines),或者这几种的组合。可用做函数的分隔符,分隔命令或变量,空行不会影响脚本的行为,因此可以用它来规划脚本代码,以增加可读性,在内置的特殊变量$IFS可以用来针对某些命令进行输入的参数进行分割,其默认就是空白符。在字符串或变量中如果有空白符,可以使用引号来规避可能的错误。

以上是总结bash中常用特殊字符的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在 Windows 上运行 shell 脚本文件的不同方法 在 Windows 上运行 shell 脚本文件的不同方法 Apr 13, 2023 am 11:58 AM

适用于 Linux 的 Windows 子系统第一种选择是使用适用于 Linux 或 WSL 的 Windows 子系统,这是一个兼容层,用于在 Windows 系统上本地运行 Linux 二进制可执行文件。它适用于大多数场景,允许您在 Windows 11/10 中运行 shell 脚本。WSL 不会自动可用,因此您必须通过 Windows 设备的开发人员设置启用它。您可以通过转到设置 > 更新和安全 > 对于开发人员来完成。切换到开发人员模式并通过选择是确认提示。接下来,查找 W

使用java的Character.isDigit()函数判断字符是否为数字 使用java的Character.isDigit()函数判断字符是否为数字 Jul 27, 2023 am 09:32 AM

使用Java的Character.isDigit()函数判断字符是否为数字字符在计算机内部以ASCII码的形式表示,每个字符都有一个对应的ASCII码。其中,数字字符0到9分别对应的ASCII码值为48到57。要判断一个字符是否为数字,可以使用Java中的Character类提供的isDigit()方法进行判断。isDigit()方法是Character类的

如何在 Word 中键入箭头 如何在 Word 中键入箭头 Apr 16, 2023 pm 11:37 PM

如何使用自动更正在 Word 中键入箭头在 Word 中键入箭头的最快方法之一是使用预定义的自动更正快捷方式。如果您键入特定的字符序列,Word 会自动将这些字符转换为箭头符号。您可以使用此方法绘制多种不同的箭头样式。要使用自动更正在 Word 中键入箭头:将光标移动到文档中要显示箭头的位置。键入以下字符组合之一:如果您不希望将您键入的内容更正为箭头符号,请按键盘上的退格键会将

如何在 iPhone 和 Mac 上输入扩展字符,例如度数符号? 如何在 iPhone 和 Mac 上输入扩展字符,例如度数符号? Apr 22, 2023 pm 02:01 PM

您的物理或数字键盘在表面上提供有限数量的字符选项。但是,有几种方法可以在iPhone、iPad和Mac上访问重音字母、特殊字符等。标准iOS键盘可让您快速访问大写和小写字母、标准数字、标点符号和字符。当然,还有很多其他角色。您可以从带有变音符号的字母到倒置的问号中进行选择。您可能无意中发现了隐藏的特殊字符。如果没有,以下是在iPhone、iPad和Mac上访问它们的方法。如何在iPhone和iPad上访问扩展字符在iPhone或iPad上获取扩展字符非常简单。在“信息”、“

如何在 Microsoft Excel 中应用上标和下标格式选项 如何在 Microsoft Excel 中应用上标和下标格式选项 Apr 14, 2023 pm 12:07 PM

上标是一个字符或多个字符,可以是字母或数字,您需要将其设置为略高于正常文本行。例如,如果您需要写1st,则字母st需要略高于字符1。同样,下标是一组字符或单个字符,需要设置为略低于正常文本级别。例如,当你写化学式时,你需要把数字放在正常字符行的下方。以下屏幕截图显示了上标和下标格式的一些示例。尽管这似乎是一项艰巨的任务,但实际上将上标和下标格式应用于您的文本非常简单。在本文中,我们将通过一些简单的步骤说明如何轻松地使用上标或下标格式设置文本。希望你喜欢阅读这篇文章。如何在 Excel 中应用上标

正确在matplotlib中显示中文字符的方法 正确在matplotlib中显示中文字符的方法 Jan 13, 2024 am 11:03 AM

在matplotlib中正确地显示中文字符,是很多中文用户常常遇到的问题。默认情况下,matplotlib使用的是英文字体,无法正确显示中文字符。为了解决这个问题,我们需要设置正确的中文字体,并将其应用到matplotlib中。下面是一些具体的代码示例,帮助你正确地在matplotlib中显示中文字符。首先,我们需要导入需要的库:importmatplot

Ubuntu Bash性能对比:Ubuntu与Win10周年版 Ubuntu Bash性能对比:Ubuntu与Win10周年版 Jan 04, 2024 pm 09:36 PM

今年初,当Microsoft和Canonical发布Windows10Bash和Ubuntu用户空间,我尝试做了一些初步性能测试UbuntuonWindows10对比原生Ubuntu,这次我发布更多的,关于原生纯净的Ubuntu和基于Windows10的基准对比。Windows的Linux子系统测试完成了所有测试,并随着Windows10周年更新放出。默认的Ubuntu用户空间还是Ubuntu14.04,但是已经可以升级到16.04。所以测试首先在14.04测试,完成后将系统升级升级到16.04

五个鲜为人知的现代 Bash 脚本编写技术 五个鲜为人知的现代 Bash 脚本编写技术 Jun 26, 2023 pm 08:36 PM

程序员经常使用Bash命令语言创建Shell脚本来自动化手动任务。例如,他们会为各种配置、文件操作、生成构建结果和各种与DevOps相关的活动创建Bash脚本。几乎所有类Unix或基于Unix的操作系统都为用户提供预安装的Bash解释器,因此我们可以使用Bash编写更具可移植性的自动化脚本。正如我们已经知道的那样,Bash脚本编写是指使用Bash命令语言的语法、内置Bash命令和核心操作系统CLI程序(如GNU核心工具)编写一系列命令。标准且老式的Bash脚本通常执行一些命令并在终端上显示纯文本

See all articles