文章目录

1. '(单引号):

将引号内的所有内容视为字面量,不进行变量或命令替换。示例:echo 'Hello $USER' 会输出 Hello $USER

2. "(双引号):

允许在引号内进行变量替换和命令替换。示例:echo "Hello $USER" 会输出 Hello 加上 USER 环境变量的值。

3. \(反斜杠):

在Linux中,反斜杠(\)是一个特殊字符,具有多种用途。以下是反斜杠在不同上下文中的一些常见作用:

  1. 转义字符

    • 在字符串中,反斜杠用作转义字符,它可以改变紧跟其后的字符的含义。例如,\n 表示换行符,\t 表示制表符。
    • 例如:echo "Hello\nWorld" 会在 “Hello” 和 “World” 之间插入一个换行。
  2. 文件路径分隔符

    • 在文件路径中,反斜杠用作目录分隔符,用于分隔不同的目录层级。
    • 例如:/usr/bin/bash 中的 / 表示目录层级。
  3. 续行符

    • 在Shell脚本中,反斜杠可以用于命令的续行,允许长命令跨越多行显示,而实际上它们是一行。
    • 例如:
      echo "This is a long \
      command that \
      spans multiple lines."
      
      这三行实际上会被Shell解释为一行命令。
  4. 正则表达式中的特殊字符

    • 在正则表达式中,反斜杠用于转义特殊字符,使得这些特殊字符被视为普通字符。
    • 例如:grep "\." filename 会搜索文件中包含点号(.)的行。
  5. 变量展开

    • 在Shell脚本中,反斜杠可以用于变量展开,使得变量的值在命令执行时被插入。
    • 例如:echo \$variable 会输出变量 variable 的值。
  6. 命令替换

    • 在Shell脚本中,反斜杠可以用来执行命令替换,即执行括号中的命令,并将输出替换到当前位置。
    • 例如:echo "The date is $(date)" 会输出当前日期。
  7. 函数定义

    • 在Shell脚本中,反斜杠用于定义函数时的续行。
    • 例如:
      my_function() {
          echo "Hello"
          # 一些其他命令
      }
      
  8. 循环和条件语句中的续行

    • 在循环(如 forwhileuntil)和条件语句(如 if)中,反斜杠用于续行。
    • 例如:
      for i in \
      item1 \
      item2 \
      item3
      do
          echo $i
      done
      
  9. 文件权限和所有权

    • 在改变文件权限和所有权时,反斜杠用于指定特定的用户或组。
    • 例如:chown user:group filename 中的 : 用于分隔用户和组。
  10. 环境变量

    • 在设置环境变量时,反斜杠可以用于续行。
    • 例如: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-lls 命令的一个选项,表示长格式列表。
    在Unix和类Unix系统中,-符号在不同的上下文中有不同的含义。以下是一些常见的用法:
  1. 命令行参数
    在命令行中,-符号通常用于指定命令的选项或参数。例如,ls -l命令中的-l是一个选项,用于以长格式列出目录内容。

  2. 标准输入/输出的别名
    在重定向中,-符号可以作为标准输入(stdin)、标准输出(stdout)或标准错误(stderr)的别名。例如:

    • command -:等同于command 0<&-,关闭标准输入。
    • command > -:等同于command 1>&-,关闭标准输出。
    • command 2> -:等同于command 2>&-,关闭标准错误。
  3. 文件名
    在文件操作命令中,-符号可以作为文件名的占位符,表示标准输入或输出。例如:

    • cat -:读取标准输入的内容。
    • grep pattern -:在标准输入上搜索指定的模式。
  4. 网络编程
    在网络编程中,-符号有时用于表示“无”或“默认”。例如,在某些网络配置命令中,-可能表示“不使用”某个选项。

  5. 权限管理
    在权限管理命令中,-符号有时用于表示“移除”或“取消”某个权限。例如,在chmod命令中,使用-可以取消特定的权限。

  6. 路径分隔符
    在路径名中,-符号可以作为路径的一部分,表示目录或文件的名称。例如,/path/to/some-file-1.txt

  7. 负数表示
    在数学表达式中,-符号用于表示负数。例如,-5表示负五。

  8. 减号操作符
    在算术运算中,-符号用作减号操作符。例如,3 - 2的结果是1

  9. 否定逻辑
    在逻辑表达式中,-符号有时用于表示否定。例如,在某些编程语言中,!not可以用来否定一个布尔值。

  10. 环境变量的默认值
    在某些配置文件或脚本中,-符号可能用来表示环境变量的默认值。

这些是-符号在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.txtfileA.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; command2command1 执行后无论成功与否都会接着执行 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 选项、传递给脚本的参数个数、所有参数、所有参数(与 $* 相同)、最后一个参数。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐