特殊字符(及其Ctrl快捷键)

本文详细介绍了Linux脚本中各种特殊字符的用途,包括#(注释)、;(命令分隔符)、.(点命令)、"(双引号)、'(单引号)、((转义符)、/(文件路径分隔符)、`(命令替换)等,并通过实例展示了它们在脚本中的应用,如条件判断、变量扩展、命令组、管道等。此外,还提到了一些控制字符如Ctrl-B、Ctrl-C、Ctrl-D等对终端的影响。
摘要由CSDN通过智能技术生成

**

在脚本或其他别的地方出现的特殊字符

**

注释. 以一个#开头的行 (#!是例外) 是注释行.
1 # 这是一行注释.
注释也可以出现在一个命令语句的后面。
1 echo “A comment will follow.” # 这里可以添加注释.
2 # ^ 注意在#前面可以有空白符 #
注释行前面也可以有空白字符.
1 #注意这个注释行的开头是一个TAB键.

在同一行中,命令不会跟在一个注释的后面。因为这种情况下没有办法分辨注释的结尾,命令只能放在同一行的行首。用另外的一个新行开始下一个注释。

当然了,在echo命令给出的一个转义的#字符并不会开始一个注释。同样地,出现在一些参数代换结构和在数值常量表达式中的#字符也同样不会开始一个注释。
1 echo “The # here does not begin a comment.”
2 echo ‘The # here does not begin a comment.’
3 echo The # here does not begin a comment.
4 echo The # here begins a comment.
5
6 echo ${PATH#*:} # 前面的#是参数代换,不是注释.
7 echo $(( 2#101011 )) # 基本转换,不是注释.
8
标准的引用和转义 符("’\)可以转义#。
当然,模式匹配操作也可以使用#,而不必把它当做注释的开始。

命令分割符[分号]. 分割符允许在同一行里有两个或更多的命令.

1 echo hello; echo there
2
3
4 if [ -x “$filename” ]; then # 注意:“if” and "then"需要分隔符
5 # 思考一下这是为什么?
6 echo “File $filename exists.”; cp $filename $filename.bak
7 else
8 echo “File $filename not found.”; touch $filename
9 fi; echo “File test complete.”

注意”;”有时需要转义.

;; case语句分支的结束符[双分号].

1 case “$variable” in
2 abc) echo “$variable = abc” ;;
3 xyz) echo “$variable = xyz” ;;
4 esac

.

"点"命令[圆点]. 等同于source .这是一个bash的内建命令.

“点”, 作为一个文件名的组成部分.当点(.)以一个文件名为前缀时,起作用使该文件变成了隐藏文件。这种隐藏文件ls一般是不会显示出来的。[译者注:除非你加了选项-a]
bash$ touch .hidden-file
bash$ ls -l
total 10
-rw-r–r-- 1 bozo 4034 Jul 18 22:04 data1.addressbook
-rw-r–r-- 1 bozo 4602 May 25 13:58 data1.addressbook.bak
-rw-r–r-- 1 bozo 877 Dec 17 2000 employment.addressbook

bash$ ls -al
total 14
drwxrwxr-x 2 bozo bozo 1024 Aug 29 20:54 ./
drwx------ 52 bozo bozo 3072 Aug 29 20:51 …/
-rw-r–r-- 1 bozo bozo 4034 Jul 18 22:04 data1.addressbook
-rw-r–r-- 1 bozo bozo 4602 May 25 13:58 data1.addressbook.bak
-rw-r–r-- 1 bozo bozo 877 Dec 17 2000 employment.addressbook
-rw-rw-r-- 1 bozo bozo 0 Aug 29 20:54 .hidden-file

作为目录名时,单个点(.)表示当前目录,两个点(…)表示上一级目录(译者注:或称为父目录)。

bash$ pwd
/home/bozo/projects

bash$ cd .
bash$ pwd
/home/bozo/projects

bash$ cd …
bash$ pwd
/home/bozo/

bash$ cp /home/bozo/current_work/junk/* .

.

单点(.)文件名常常被当作文件移动命令的目的路径.

点(.)字符匹配.作为正则表达式的一部分,匹配字符时,单点(.)表示匹配任意一个字符。

"

部分引用[双引号]. "STRING"的引用会使STRING里的特殊字符能够被解释。请参考第五章.

完全引用[单引号].

'STRING’能引用STRING里的所有字符(包括特殊字符也会被原样引用). 这是一个比使用双引号(“)更强的引用。 参考第5章.

,

逗号操作符[逗号].

逗号操作符用于连接一连串的数学表达式。这一串的数学表达式每一个都被求值,但只有最后一个被返回。(译者注:换句话说,就是整个表达式的值取决于最后一个表达式的值。)
1 let “t2 = ((a = 9, 15 / 3))” # Set “a = 9” and “t2 = 15 / 3”

\

转义符[后斜杠].

用于单个字符的引用机制。

\X “转义"字符为X.它有"引用"X的作用,也等同于直接在单引号里的’X’.\符也可以用于引用双引号(”)和单引号(’),这时双引号和单引号就表示普通的字符,而不是表示引用了。

参考第五章对转义字符的更深入的解释。

/

文件路径的分隔符[前斜杠].

分隔一个文件路径的各个部分。(就像/home/bozo/projects/Makefile).

它也是算术操作符中的除法.

`

命令替换.

command 结构使字符(`)[译者注:这个字符不是单引号,而是在标准美国键盘上的ESC键下面,在字符1左边,在TAB键上面的那个键,要特别留心]引住的命令(command)执行结果能赋值给一个变量。它也被称为后引号(backquotes)或是斜引号(backticks).

:

空命令[冒号].

这个命令意思是空操作(即什么操作也不做). 它一般被认为是和shell的内建命令true是一样的。冒号":" 命令是Bash自身内建的, and its它的退出状态码是真(即0)。[译者注:shell中真用数字0表示].

1 :
2 echo $? # 0

;

死循环可以这么写:

1 while :
2 do
3 operation-1
4 operation-2
5 …
6 operation-n
7 done
8
9 # 等同于:
10 # while true
11 # do
12 # …
13 # done

在if/then的测试结构中用作占位符:

1 if condition
2 then : # 什么也不做的分支
3 else
4 take-some-action
5 fi

在必须要有两元操作的地方作为一个分隔符, 参考默认参数.

1 : ${username=whoami}
2 # ${username=whoami} 如果没有开头的:,将会出错
3 # 除非"username"是一个外部命令或是内建命令…

在here document中的一个命令作为一个分隔符.

在参数替换中为字符串变量赋值
1 : ${HOSTNAME?} ${USER?} ${MAIL?}
2 # 如果列出的一个或多个基本的环境变量没有设置,
3 #+ 将打印出错信息。

变量扩展/子串代换.

和重定向操作符(>)连用, 可以把一个文件的长度截短为零,文件的权限不变。如果文件不存在,则会创建一个新文件。
1 : > data.xxx # 文件"data.xxx"现在长度为0了
2
3 # 作用相同于:cat /dev/null >data.xxx(译者注:echo >data.xxx也可以)
4 # 但是,用NULL(:)操作符不会产生一个新的进程,因为NULL操作符是内建的。
请参考例子 12-14.

和添加重定向操作符(>>)连用(: >> target_file).如果目标文件存在则什么也没有发生,如果目标文件不存在,则创建它。

这只能应用在普通文件中,不能用在管道,符号链接和其他的特殊文件。

虽然这是不被推荐的,但是NULL操作符(:)也可以用于开始注释一行。使用#来注释一行将会使Bash不会检查这行后面的语法是否有错,因此#注释几乎可以出现任何的东西。但是,对于用NULL操作符(:)注释的行则不是这样。

下面一个会产生错误的注释。
1 : This is a comment that generates an error, ( if [ $x -eq 3] ).

字符”:”也用于域分割符。比如说在/etc/passwd和环境变量 P A T H 里 . b a s h PATH里. bash PATH.bash echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games

!

取反

一个测试结果或退出状态[感叹号]. 取反操作符(!)取反一个命令的退出状态(参考例子 6-2).它也取反一个测试操作。例如,它能改相等符( = )为不等符( != ).取反操作符(!)是一个Bash的关键字.

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

还有一种环境里,在命令行中,感叹号(!)调用属于历史命令机制的调用(详细请看附录 J).值得一提的是,在一个脚本里,命令历史机制是被禁止的。

*

通配符[星号].

星号(*)字符在用于匹配文件名扩展的一个通配符.它自动匹配给定的目录下的每一个文件。

bash$ echo *
abs-book.sgml add-drive.sh agram.sh alias.sh

星号(*)也用于正则表达式中匹配任意数字字符。.

*

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值