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. \(反斜杠):
在Linux中,反斜杠(\)是一个特殊字符,具有多种用途。以下是反斜杠在不同上下文中的一些常见作用:
-
转义字符:
- 在字符串中,反斜杠用作转义字符,它可以改变紧跟其后的字符的含义。例如,
\n表示换行符,\t表示制表符。 - 例如:
echo "Hello\nWorld"会在 “Hello” 和 “World” 之间插入一个换行。
- 在字符串中,反斜杠用作转义字符,它可以改变紧跟其后的字符的含义。例如,
-
文件路径分隔符:
- 在文件路径中,反斜杠用作目录分隔符,用于分隔不同的目录层级。
- 例如:
/usr/bin/bash中的/表示目录层级。
-
续行符:
- 在Shell脚本中,反斜杠可以用于命令的续行,允许长命令跨越多行显示,而实际上它们是一行。
- 例如:
这三行实际上会被Shell解释为一行命令。echo "This is a long \ command that \ spans multiple lines."
-
正则表达式中的特殊字符:
- 在正则表达式中,反斜杠用于转义特殊字符,使得这些特殊字符被视为普通字符。
- 例如:
grep "\." filename会搜索文件中包含点号(.)的行。
-
变量展开:
- 在Shell脚本中,反斜杠可以用于变量展开,使得变量的值在命令执行时被插入。
- 例如:
echo \$variable会输出变量variable的值。
-
命令替换:
- 在Shell脚本中,反斜杠可以用来执行命令替换,即执行括号中的命令,并将输出替换到当前位置。
- 例如:
echo "The date is $(date)"会输出当前日期。
-
函数定义:
- 在Shell脚本中,反斜杠用于定义函数时的续行。
- 例如:
my_function() { echo "Hello" # 一些其他命令 }
-
循环和条件语句中的续行:
- 在循环(如
for、while、until)和条件语句(如if)中,反斜杠用于续行。 - 例如:
for i in \ item1 \ item2 \ item3 do echo $i done
- 在循环(如
-
文件权限和所有权:
- 在改变文件权限和所有权时,反斜杠用于指定特定的用户或组。
- 例如:
chown user:group filename中的:用于分隔用户和组。
-
环境变量:
- 在设置环境变量时,反斜杠可以用于续行。
- 例如:
export PATH=/usr/bin:/bin:/usr/local/bin
这些是反斜杠在Linux中的一些主要作用。由于其多功能性,反斜杠是Linux和Unix系统中一个非常有用的字符。
\ 是也可用来续行的,它允许命令跨多行书写,使得代码更加可读。在 Bash 脚本中,反斜杠(\)用作续行符,表示命令在下一行继续,而不是结束。
例如,考虑以下命令:
CHOICE=$(whiptail --title "My Radio List" \
--radiolist "Choose an option" 15 60 3 \
"Option 1" "This is option 1" ON \
"Option 2" "This is option 2" OFF \
3>&1 1>&2 2>&3)
在这个例子中,每一行的末尾都有一个反斜杠(\),它告诉 Bash shell 命令在下一行继续。这样,即使命令跨越了多行,它也会被当作一行来处理。
反斜杠续行符的作用是在命令行界面(CLI)或脚本中,当一行的长度超过了屏幕的宽度或者为了提高可读性时,将长命令分割成多行书写。这样,每个参数或命令的部分可以单独占据一行,使得整个命令的结构更加清晰。
在实际使用中,续行符后的换行可以有任意数量的空格,但通常为了美观和一致性,会紧跟在反斜杠后面。如果不需要续行,那么在行尾就不应该使用反斜杠。
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命令的一个选项,表示长格式列表。
在Unix和类Unix系统中,-符号在不同的上下文中有不同的含义。以下是一些常见的用法:
-
命令行参数:
在命令行中,-符号通常用于指定命令的选项或参数。例如,ls -l命令中的-l是一个选项,用于以长格式列出目录内容。 -
标准输入/输出的别名:
在重定向中,-符号可以作为标准输入(stdin)、标准输出(stdout)或标准错误(stderr)的别名。例如:command -:等同于command 0<&-,关闭标准输入。command > -:等同于command 1>&-,关闭标准输出。command 2> -:等同于command 2>&-,关闭标准错误。
-
文件名:
在文件操作命令中,-符号可以作为文件名的占位符,表示标准输入或输出。例如:cat -:读取标准输入的内容。grep pattern -:在标准输入上搜索指定的模式。
-
网络编程:
在网络编程中,-符号有时用于表示“无”或“默认”。例如,在某些网络配置命令中,-可能表示“不使用”某个选项。 -
权限管理:
在权限管理命令中,-符号有时用于表示“移除”或“取消”某个权限。例如,在chmod命令中,使用-可以取消特定的权限。 -
路径分隔符:
在路径名中,-符号可以作为路径的一部分,表示目录或文件的名称。例如,/path/to/some-file-1.txt。 -
负数表示:
在数学表达式中,-符号用于表示负数。例如,-5表示负五。 -
减号操作符:
在算术运算中,-符号用作减号操作符。例如,3 - 2的结果是1。 -
否定逻辑:
在逻辑表达式中,-符号有时用于表示否定。例如,在某些编程语言中,!或not可以用来否定一个布尔值。 -
环境变量的默认值:
在某些配置文件或脚本中,-符号可能用来表示环境变量的默认值。
这些是-符号在Unix和类Unix系统中的一些常见用法。具体的用法取决于上下文环境。
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 选项、传递给脚本的参数个数、所有参数、所有参数(与 $* 相同)、最后一个参数。
更多推荐




所有评论(0)