Linux_bash的一些特殊符号
文章目录
- 1. '(单引号):
- 2. "(双引号):
- 3. \(反斜杠):
- 4. $(美元符号):
- 5. #(井号):
- 6. |(管道符):
- 7. >(大于号):
- 8. <(小于号):
- 9. >>(双大于号):
- 10. &(和号):
- 11. ;(分号):
- 12. &&(双和号):
- 13. ||(双竖线):
- 14. ( 和 )(圆括号):
- 15. { 和 }(花括号):
- 16. ~(波浪号):
- 17. !(感叹号):
- 18. *(星号):
- 19. ?(问号):
- 20. [ 和 ](方括号):
- 21. $(())(算术扩展):
- 22. !(历史扩展):
- 23. <<(Here Document):
- 24. && 和 ||(逻辑与和逻辑或):
- 25. !(历史命令):
- 26. :(空命令):
- 27. ^(按位异或):
- 28. ~(家目录):
- 29. ;(命令分隔符):
- 30. `(反引号)和 $()(命令替换):
- 31. \(转义符):
- 32. -(选项前缀):
- 33. --(选项分隔符):
- 34. * 和 **(glob模式):
- 35. > 和 >>(标准输出重定向):
- 36. <(标准输入重定向):
- 37. 2> 和 2>>(标准错误重定向):
- 38. &>(标准输出和标准错误重定向):
- 39. |&(将标准错误通过管道传递):
- 40. $(command) 和 command(命令替换):
- 41. ()(子Shell):
- 42. {}(命令块):
- 43. *(星号):
- 44. ?(问号):
- 45. |(管道):
- 46. >(重定向输出):
- 47. <(重定向输入):
- 48. >>(追加重定向):
- 49. !(历史命令):
- 50. &>(同时重定向输出和错误):
- 51. !!(重复上一个命令):
- 52. &(后台执行):
- 53. |&(管道标准输出和标准错误):
- 54. ;(命令分隔符):
- 55. ()(子 Shell):
- 56. [](测试命令):
- 57. [[ ]](扩展测试命令):
- 58. :(冒号):
- 59. @(符号):
- 60. #(注释):
- 61. $* 和 $@:
- 62. ${VAR%Pattern} 和 ${VAR#Pattern}:
- 63. $(( expression )):
- 64. $( command ):
- 65. $?:
- 66. $$:
- 67. $!:
- 68. $0:
- 69. $PATH:
- 70. `$?`、`$-`、`$#`、`$*`、`$@`、`$_`:
1. '(单引号):
将引号内的所有内容视为字面量,不进行变量或命令替换。示例:echo 'Hello $USER'
会输出 Hello $USER
。
2. "(双引号):
允许在引号内进行变量替换和命令替换。示例:echo "Hello $USER"
会输出 Hello
加上 USER
环境变量的值。
3. \(反斜杠):
转义后面的字符,使其被当作字面量处理。示例:echo "He said, \"Hello\""
会输出 He said, "Hello"
。
4. $(美元符号):
用于引用变量的值或执行命令替换。示例:echo $HOME
会输出当前用户的主目录。echo $(date)
会输出当前日期和时间。
5. #(井号):
表示注释符号,用于在脚本中注释代码。示例:# This is a comment
会被忽略,不会被执行。
6. |(管道符):
将一个命令的输出传递给另一个命令作为输入。示例:ls | grep 'txt'
会列出当前目录下所有以 .txt
结尾的文件。
7. >(大于号):
将命令的标准输出重定向到一个文件,覆盖原文件内容。示例:echo "Hello" > file.txt
会将 Hello
写入 file.txt
,覆盖文件内容。
8. <(小于号):
将文件内容作为命令的标准输入。示例:sort < file.txt
会对 file.txt
文件的内容进行排序。
9. >>(双大于号):
将命令的标准输出附加到文件末尾。示例:echo "Hello" >> file.txt
会将 Hello
追加到 file.txt
的末尾。
10. &(和号):
将命令放在后台运行。示例:sleep 30 &
会在后台运行 sleep
命令。
11. ;(分号):
在一行中执行多个命令,命令之间用分号分隔。示例:echo "Hello"; ls
会先输出 Hello
,然后列出当前目录的文件。
12. &&(双和号):
只有在前一个命令成功(返回状态为0)时,才执行后一个命令。示例:mkdir newdir && cd newdir
只有在成功创建 newdir
目录后,才会切换到该目录。
13. ||(双竖线):
只有在前一个命令失败(返回状态非0)时,才执行后一个命令。示例:mkdir newdir || echo "Directory creation failed"
如果目录创建失败,会输出错误信息。
14. ( 和 )(圆括号):
用于创建子shell,或者在命令中分组执行多个命令。示例:(cd /tmp; ls)
会在子shell中切换到 /tmp
目录并列出文件,然后返回原来的目录。
15. { 和 }(花括号):
用于命令的分组或者扩展。示例:echo {A,B,C}
会输出 A B C
。
16. ~(波浪号):
表示当前用户的主目录。示例:cd ~
会切换到当前用户的主目录。
17. !(感叹号):
用于历史命令的引用。示例:!ls
会执行最近的 ls
命令。
18. *(星号):
通配符,表示匹配任意数量的字符。示例:ls *.txt
会列出所有以 .txt
结尾的文件。
19. ?(问号):
通配符,表示匹配任意单个字符。示例:ls file?.txt
会列出所有名为 file
加一个字符然后是 .txt
的文件。
20. [ 和 ](方括号):
用于匹配字符类。示例:ls file[1-3].txt
会列出 file1.txt
, file2.txt
, 和 file3.txt
。
21. $(())(算术扩展):
用于算术运算。示例:echo $((5 + 3))
会输出 8
。
22. !(历史扩展):
用于引用历史命令。示例:!ls
会重复执行最近的 ls
命令。
23. <<(Here Document):
用于定义多行字符串块,通常用于脚本中。示例:
cat <<EOF
This is a
multi-line string
EOF
输出内容是 This is a multi-line string
。
24. && 和 ||(逻辑与和逻辑或):
用于根据前一个命令的执行结果决定是否执行后一个命令。
&&
(双与号):仅在前一个命令成功时执行后一个命令。示例:command1 && command2
只有command1
成功时才执行command2
。||
(双或号):仅在前一个命令失败时执行后一个命令。示例:command1 || command2
只有command1
失败时才执行command2
。
25. !(历史命令):
用于引用历史命令或其变体。
- 示例:
!!
重复上一个命令,!n
执行历史记录中编号为n
的命令,!string
执行最近一条以string
开头的命令。
26. :(空命令):
表示一个成功的空操作,常用于条件测试或占位符。
- 示例:
if [ -f file ]; then :; else echo "File not found"; fi
使用:
作为空命令。
27. ^(按位异或):
在某些编程语言和工具中用于执行按位异或操作。
- 示例:在正则表达式中,
^
表示行的开头。
28. ~(家目录):
表示当前用户的家目录。
- 示例:
cd ~
切换到当前用户的家目录。
29. ;(命令分隔符):
在同一行中分隔多个命令,每个命令依次执行。
- 示例:
echo "Hello"; echo "World"
会先输出Hello
然后输出World
。
30. `(反引号)和 $()(命令替换):
用于将命令的输出作为结果插入到命令中。
- 示例:
echo "Current date is `date`"
使用反引号,
echo "Current date is $(date)"
使用 $()
。
31. \(转义符):
用于转义特殊字符,使其失去特殊含义。
- 示例:
echo "This is a \$dollar sign"
输出This is a $dollar sign
。
32. -(选项前缀):
作为命令选项的前缀。
- 示例:
ls -l
,-l
是ls
命令的一个选项,表示长格式列表。
33. --(选项分隔符):
用来指示选项的结束,之后的内容不再被当作选项。
- 示例:
grep -- -pattern file.txt
,--
之后的-pattern
被当作搜索模式,而不是选项。
34. * 和 **(glob模式):
用于文件名匹配。
*
(星号):匹配零个或多个字符。示例:ls *.jpg
匹配所有以.jpg
结尾的文件。**
(双星号):递归匹配目录及其子目录中的所有文件。示例:ls **/*.txt
列出当前目录及其所有子目录中的.txt
文件(需要开启 globstar 扩展)。
35. > 和 >>(标准输出重定向):
>
(重定向标准输出):将输出写入到文件中,如果文件存在,则覆盖原文件内容。示例:echo "Hello" > file.txt
。>>
(追加到文件):将输出追加到文件末尾。示例:echo "World" >> file.txt
。
36. <(标准输入重定向):
从文件中读取输入。
- 示例:
sort < file.txt
。
37. 2> 和 2>>(标准错误重定向):
2>
(重定向标准错误):将标准错误输出重定向到文件中,文件内容会被覆盖。示例:command 2> error.log
。2>>
(追加标准错误到文件):将标准错误追加到文件末尾。示例:command 2>> error.log
。
38. &>(标准输出和标准错误重定向):
将标准输出和标准错误同时重定向到同一个文件。
- 示例:
command &> output.log
。
39. |&(将标准错误通过管道传递):
将标准输出和标准错误都通过管道传递给下一个命令。
- 示例:
command1 |& command2
。
40. $(command) 和 command(命令替换):
将命令的输出作为字符串插入到其他命令中。
- 示例:
echo "Current directory: $(pwd)"
。
41. ()(子Shell):
在子Shell中执行命令组,子Shell中的变量不会影响主Shell。
- 示例:
(cd /tmp; ls)
,在子Shell中切换到/tmp
目录并列出文件。
42. {}(命令块):
在同一Shell上下文中执行一组命令,用分号分隔。
- 示例:
{ echo "Hello"; echo "World"; }
,将两个echo
命令作为一个块执行。
43. *(星号):
用于匹配多个文件或作为通配符。
- 示例:
ls *.txt
,列出所有.txt
文件。
44. ?(问号):
用于匹配单个字符。
- 示例:
ls file?.txt
,匹配file1.txt
、fileA.txt
等。
45. |(管道):
将一个命令的输出作为另一个命令的输入。
- 示例:
ls | grep "file"
,将ls
的输出传递给grep
。
46. >(重定向输出):
将命令的输出重定向到文件,覆盖文件内容。
- 示例:
echo "Hello" > file.txt
。
47. <(重定向输入):
将文件的内容作为命令的输入。
- 示例:
sort < file.txt
。
48. >>(追加重定向):
将输出追加到文件末尾,而不是覆盖文件。
- 示例:
echo "World" >> file.txt
。
49. !(历史命令):
在命令行历史中引用之前执行的命令。
- 示例:
!ls
,重复最后一个ls
命令。
50. &>(同时重定向输出和错误):
将标准输出和标准错误重定向到同一个文件。
- 示例:
command &> output.txt
,将所有输出(包括错误)写入output.txt
。
51. !!(重复上一个命令):
重复最后执行的命令。
- 示例:
!!
,执行上一个命令。
52. &(后台执行):
将命令放在后台执行,使得终端可以继续接受其他命令。
- 示例:
command &
,command
在后台运行,你可以继续执行其他命令。
53. |&(管道标准输出和标准错误):
将标准输出和标准错误都通过管道传递到下一个命令。
- 示例:
command1 |& command2
,将command1
的所有输出(标准输出和标准错误)传递给command2
。
54. ;(命令分隔符):
将多个命令放在一行中顺序执行,不管前一个命令是否成功。
- 示例:
command1; command2
,command1
执行后无论成功与否都会接着执行command2
。
55. ()(子 Shell):
在一个新的子 Shell 中执行命令组,这样对环境变量的修改不会影响到当前 Shell。
- 示例:
(cd /tmp; ls)
,在子 Shell 中切换到/tmp
目录并列出文件。
56. [](测试命令):
用于进行条件测试。
- 示例:
[ -f file.txt ]
,测试file.txt
是否存在并且是一个文件。
57. [[ ]](扩展测试命令):
进行更复杂的条件测试,支持更多的测试操作符。
- 示例:
[[ -f file.txt && -r file.txt ]]
,测试file.txt
是否存在且可读。
58. :(冒号):
在 Shell 脚本中用作空操作或别名。
- 示例:
:
,作为空操作符;alias ll='ls -l'
,设置ll
的别名。
59. @(符号):
在某些命令中表示特定的功能。
- 示例:在
scp
中,user@host:/path
表示从host
机器上的/path
目录获取文件。
60. #(注释):
表示注释,不被执行。
- 示例:
# This is a comment
。
61. $* 和 $@:
这两个参数在脚本中用来引用所有传递给脚本的参数。$*
将所有的参数视为一个单一的字符串,而 $@
将每个参数视为独立的字符串。
- 示例:在脚本中,
for arg in "$@"; do echo $arg; done
会遍历并打印所有传递给脚本的参数。
62. ${VAR%Pattern} 和 ${VAR#Pattern}:
这些是参数扩展操作,用于从变量值中删除匹配的模式。
${VAR%Pattern}
:从变量VAR
的值末尾删除匹配Pattern
的部分。${VAR#Pattern}
:从变量VAR
的值开头删除匹配Pattern
的部分。
63. $(( expression )):
用于算术运算。
- 示例:
$(( 3 + 5 ))
计算并返回 8。
64. $( command ):
用于命令替换,将命令的输出赋值给变量。
- 示例:
result=$(ls -l | grep 'txt' | wc -l)
将匹配 ‘txt’ 的行数赋值给result
。
65. $?:
用于获取最近一个命令的退出状态。
- 示例:在脚本中,
command
执行后,echo $?
会打印command
的退出状态。
66. $$:
用于获取当前 shell 进程的进程 ID (PID)。
- 示例:在脚本中,
echo $$
会打印当前脚本的 PID。
67. $!:
用于获取最近一个后台命令的 PID。
- 示例:如果你将
sleep 10 &
放到后台,echo $!
会打印该后台进程的 PID。
68. $0:
表示当前脚本的名称。
- 示例:在脚本中,
echo $0
会打印当前脚本的名称。
69. $PATH:
这是一个环境变量,包含了系统可执行文件的搜索路径。
- 示例:
echo $PATH
会显示当前的路径列表。
70. $?
、$-
、$#
、$*
、$@
、$_
:
这些是内置变量,分别表示最近命令的退出状态、shell 选项、传递给脚本的参数个数、所有参数、所有参数(与 $*
相同)、最后一个参数。