shell中的特殊字符大全

推荐链接:

shell中的特殊字符大全

美元符号 $

用于 变量展开/引用 ,获取变量的值。echo $PATH

反引号 `…` 和 $()

`…` 用于 命令替换 ,执行反引号中的命令,并将其输出作为当前命令的参数。$() 是更现代的替代写法。

单引号 ''

强引用 (Strong Quote),单引号 (') 会阻止(抑制) Shell 进行变量替换,引用内的所有特殊字符都失去其特殊含义,被视为字面文本。

echo 'Value is: $PATH' (输出 Value is: $PATH)

双引号 ""

弱引用 (Weak Quote),引用内部大部分特殊字符失去特殊含义,但 $ `\** 和 \** 仍保留其特殊功能(如:允许 Shell 进行变量替换)。

echo "Value is: $PATH" (输出 Value is: 变量的值)

管道符

管道 (Unix)

管道可以把一系列命令连接起来,前一个命令的输出作为后一个命令的输入。

左边的命令应该有标准输出 | 右边的命令应该接受标准输入

1
command1 | command2

等价于:

1
2
3
command1 > tempfile
command2 < tempfile
rm tempfile

>>>&>>&&

标准输入输出重定向Shell 输入/输出重定向

介绍

执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕

进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

> :输出重定向,覆盖。> 相当于 1> ,前面默认有个 1 ,表示标准输出重定向,不包括标准错误。

左边的命令应该有标准输出 > 右边只能是文件

scriptname > filename :将 scriptname 的标准输出重定向到 filename 文件,若文件不存在则创建。

echo "123" > /home/123.txt :将 “123” 输出到 123.txt 文件中。

>> :输出重定向,追加。>> 相当于 1>> ,前面默认有个 1 ,表示标准输出重定向并追加,不包括标准错误。

scriptname >> filename 将 scriptname 的标准输出以追加的方式重定向到 filename 文件,若文件不存在则创建。

/dev/null 代表空设备文件,垃圾桶,类似windows的回收站。

0 :表示 stdin(Standardinput)标准输入。

1 :表示 stdout(Standardoutput)标准输出,系统默认值是1,所以 >/dev/null 等同于 1>/dev/null

2 :表示 stderr(Standarderror)标准错误输出。

>& :这里的 & 表示等同于的意思,2>&1 表示 2 的输出重定向(等同于)到 1 ,2 和 1 的输出合并。

&> :这里的 & 表示标准输出和标准错误输出,

& :单一个 & 符号放在命令的末尾,表示该命令转到后台执行。对于这样的命令,系统会创建一个 sub-shell 来运行这个命令,这个命令会立刻返回0并继续执行下面的 shell 命令。除此之外,在执行这个命令之后,terminal上会输出创建的sub-shell的线程ID(PID)。 仍会接收 SIGHUP 信号。关闭终端时进程通常会终止

1
2
3
4
5
6
7
8
[root@jonsnows home]# uname & echo 'asd'
[1] 4848
asd
[root@jonsnows home]# Linux
pwd
/home
[1]+ Done uname
[root@jonsnows home]#

Linux Shell 1>/dev/null 2>&1 含义

重定向

1>/dev/null :表示标准输出重定向到空设备文件,也就是不输出任何信息到终端。
2>&1 :表示标准错误输出重定向(等同于)到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

1>/dev/null 2>&1 的简化版本 &>/dev/null ,但不适用 bourne shell 。

cmd >a 2>acmd >a 2>&1 不同

cmd >a 2>a :stdout和stderr都重定向到文件 a ,文件 a 会被打开两次,两个管道,由此导致stdout和stderr互相覆盖。
cmd >a 2>&1 :stderr重定向到stdout,stdout重定向到文件 a。a文件只被打开一次,共用一个管道。

2>&12>1

2>1 :这里的 1 表示的是文件 1 ,并不代表标准输出。

2>&1&1 结合就代表标准输出,变成标准错误重定向到标准输出。

1
2
3
4
ls 2>1 # 不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1 # 没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1 # 不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1 # 等价于 ls xxx 1>out.txt 2>&1;错误和输出都输出到out.txt。

2>&1 放在 >

2>&1 >/dev/null ,可以这么写,但并不能达到我们想要的效果。因为当解释器读到 2>&1, 它并不知道标准输出被重定向到垃圾桶,此时标准输出还在终端,所以标准错误输出并没有和后面的标准输出融合。

2>&1 >/dev/null :错误输出到终端,标准输出被重定向到垃圾桶。

1
2
3
4
5
6
[root@localhost home]# ls aaa 2>&1 >output.txt
ls: cannot access aaa: No such file or directory
[root@localhost home]# ls
output.txt
[root@localhost home]# cat output.txt
[root@localhost home]#

nohup (不挂断)

使命令忽略挂起信号(SIGHUP),防止进程随终端关闭而停止。

免疫 SIGHUP 信号。关闭终端后进程仍能继续运行

默认将输出重定向到当前目录下的 nohup.out 文件。

1
2
# 启动java服务
nohup java -jar -Dserver.port=9088 gateway.jar >/dev/null 2>&1 &

等价于

1
2
# 启动java服务,不适用 bourne shell
nohup java -jar -Dserver.port=9088 gateway.jar &>/dev/null &