插件窝 干货文章 Linux中shell解析脚本的通配符、元字符、转义符说明

Linux中shell解析脚本的通配符、元字符、转义符说明

示例 字符 命令 file 431    来源:    2025-04-02

Linux Shell 解析脚本中的通配符、元字符和转义符详解

通配符 (Wildcards)

通配符用于模式匹配,常用于文件名扩展:

  1. * - 匹配任意数量的任意字符(包括零个字符)

    • 示例:ls *.txt 列出所有.txt文件
  2. ? - 匹配任意单个字符

    • 示例:ls file?.txt 匹配file1.txt、fileA.txt等
  3. [] - 匹配括号内的任意一个字符

    • 示例:ls file[123].txt 匹配file1.txt、file2.txt、file3.txt
    • 范围表示:[a-z][0-9][A-Za-z0-9]
    • 排除:[!0-9] 匹配非数字字符
  4. {} - 生成组合匹配

    • 示例:ls file{1,2,3}.txt 相当于file1.txt file2.txt file3.txt
    • 范围:{1..5} 生成1 2 3 4 5

元字符 (Metacharacters)

元字符对shell有特殊意义:

  1. | - 管道,将一个命令的输出作为另一个命令的输入

    • 示例:cat file.txt | grep "pattern"
  2. > - 输出重定向(覆盖)

    • 示例:echo "text" > file.txt
  3. >> - 输出重定向(追加)

    • 示例:echo "more text" >> file.txt
  4. < - 输入重定向

    • 示例:wc -l < file.txt
  5. ; - 命令分隔符,在一行中执行多个命令

    • 示例:command1; command2
  6. & - 后台执行

    • 示例:long_running_command &
  7. && - 逻辑与,前一个命令成功才执行后一个

    • 示例:command1 && command2
  8. || - 逻辑或,前一个命令失败才执行后一个

    • 示例:command1 || command2
  9. $ - 变量引用

    • 示例:echo $PATH
  10. # - 注释符号

    • 示例:# 这是一条注释
  11. ! - 历史命令引用或逻辑非

    • 示例:!123 执行历史记录中第123条命令
    • 示例:[ ! -f file.txt ] 检查文件不存在

转义符 (Escape Characters)

用于取消字符的特殊含义:

  1. \ - 反斜杠,转义单个字符

    • 示例:echo \$PATH 输出$PATH而不是变量值
  2. '' - 单引号,强引用,内部所有字符都作为普通字符

    • 示例:echo '$PATH' 输出$PATH
  3. "" - 双引号,弱引用,内部变量和命令替换仍会解析

    • 示例:echo "$PATH" 输出PATH变量的值
  4. ` - 反引号,用于命令替换(推荐使用$()替代)

    • 示例:echo "Today isdate"
    • 等同于:echo "Today is $(date)"

特殊注意事项

  1. 通配符扩展由shell完成,不是由命令本身处理
  2. 引号可以嵌套,但需要使用转义:echo "He said, \"Hello\""
  3. 在正则表达式中,这些字符可能有不同的含义
  4. 某些字符在不同shell中可能有不同行为(bash、zsh、ksh等)

理解这些字符的用法对于编写shell脚本和高效使用命令行至关重要。