Linux中常用符号命令的分类对比

以下是 Linux 中常用符号命令的分类对比及实例,按功能整理:


一、通配符(Wildcards)

1. * vs ? vs []

  • *:匹配任意数量字符(包括0个)。
    1
    ls *.txt       # 列出所有以 .txt 结尾的文件
  • ?:匹配单个字符。
    1
    ls file?.txt   # 匹配 file1.txt、fileA.txt 等
  • []:匹配括号内的任意单个字符。
    1
    ls file[1-3].txt  # 匹配 file1.txt、file2.txt、file3.txt

二、重定向(Redirection)

1. > vs >>

  • >:覆盖输出到文件(清空原内容)。
    1
    echo "Hello" > output.txt  # 覆盖写入
  • >>:追加输出到文件。
    1
    echo "World" >> output.txt  # 追加到文件末尾

2. < vs <<

  • <:从文件读取输入。
    1
    grep "error" < log.txt     # 从 log.txt 中搜索 "error"
  • <<:Here Document(输入多行内容直到终止符)。
    1
    2
    3
    4
    cat << EOF
    Line 1
    Line 2
    EOF

三、管道与命令组合

1. |(管道)

  • 将前一个命令的输出作为后一个命令的输入。
    1
    ls -l | grep ".txt"   # 列出文件后过滤出包含 ".txt" 的行

2. && vs ||

  • &&:前一条命令成功(退出码0)后执行后续命令。
    1
    make && make install  # 编译成功后安装
  • ||:前一条命令失败后执行后续命令。
    1
    ping example.com || echo "Ping failed"

四、引用与转义

1. "(双引号) vs '(单引号)

  • ":允许变量和命令替换。
    1
    echo "$USER"  # 输出当前用户名(如 root)
  • ':完全原样输出,禁止替换。
    1
    echo '$USER'  # 输出 $USER(不解析变量)

2. \(反斜杠)

  • 转义单个字符。
    1
    echo "Price: \$100"  # 输出 Price: $100

五、命令替换与变量

1. $() vs ` `

  • $():执行命令并替换结果(推荐使用)。
    1
    echo "Today is $(date)"
  • ` `:功能同 $(),但可读性较差。
    1
    echo "Today is `date`"

2. ${}(变量操作)

  • 定义或操作变量。
    1
    2
    name="Linux"
    echo "${name}_OS" # 输出 Linux_OS

六、进程控制

1. &(后台运行)

  • 将命令放到后台执行。
    1
    sleep 10 &  # 后台运行 sleep 命令

2. ;(命令分隔符)

  • 按顺序执行多条命令。
    1
    echo "Start"; sleep 2; echo "End"

七、其他符号

1. {}(大括号扩展)

  • 生成序列或组合。
    1
    2
    echo {1..3}       # 输出 1 2 3
    echo file{a,b}.txt # 输出 filea.txt fileb.txt

2. !(历史命令与逻辑非)

  • 调用历史命令或逻辑否定。
    1
    2
    3
    !!                # 执行上一条命令
    !grep # 执行最近一条以 grep 开头的命令
    [ ! -f file.txt ] # 如果文件不存在则条件为真

总结对比表

符号 功能说明 实例
* 匹配任意数量字符 rm *.log
>/>> 覆盖/追加输出到文件 echo "A" > file / echo "B" >> file
&&/` `
"/' 允许/禁止变量替换 echo "$PATH" / echo '$PATH'
$()/`` 命令替换(推荐前者) echo $(ls)
` ` 管道传递数据

常见误区

  1. 通配符与正则表达式:通配符(*, ?)用于文件名匹配,而正则表达式(如 grep 中的 .*)用于文本匹配。
  2. >>>:误用覆盖符号可能导致文件内容丢失。
  3. 引号差异:单引号会忽略变量,双引号会展开变量。

掌握这些符号的用法可以大幅提高 Linux 命令行的操作效率!