Linux/Unix shell 中特殊符号和变量的含义和用途

292 阅读2分钟

Linux/Unix shell 中,有许多特殊符号和变量,它们具有特定的含义和用途。以下是一些常见的符号及其解释:


1. 特殊变量

$?

  • 含义:上一个命令的退出状态码。
  • 示例
    ls
    echo $?  # 输出 0 表示成功
    

$$

  • 含义:当前 shell 进程的进程 ID(PID)。
  • 示例
    echo $$  # 输出当前 shell 的 PID
    

$!

  • 含义:最后一个后台运行的进程的 PID。
  • 示例
    sleep 10 &
    echo $!  # 输出 sleep 命令的 PID
    

$0

  • 含义:当前脚本或 shell 的名称。
  • 示例
    echo $0  # 输出脚本或 shell 的名称(如 /bin/bash)
    

$1, $2, $3, ...

  • 含义:脚本或函数的第 1、第 2、第 3 个参数。
  • 示例
    ./script.sh arg1 arg2
    # 在脚本中:
    echo $1  # 输出 arg1
    echo $2  # 输出 arg2
    

$#

  • 含义:传递给脚本或函数的参数个数。
  • 示例
    ./script.sh arg1 arg2
    # 在脚本中:
    echo $#  # 输出 2
    

$@

  • 含义:所有传递给脚本或函数的参数,每个参数作为单独的字符串。
  • 示例
    ./script.sh arg1 arg2
    # 在脚本中:
    echo $@  # 输出 arg1 arg2
    

$*

  • 含义:所有传递给脚本或函数的参数,作为一个整体字符串。
  • 示例
    ./script.sh arg1 arg2
    # 在脚本中:
    echo $*  # 输出 "arg1 arg2"
    

2. 特殊符号

#

  • 含义:注释符号,# 后面的内容会被忽略。
  • 示例
    echo "Hello"  # 这是一个注释
    

;

  • 含义:命令分隔符,用于在一行中执行多个命令。
  • 示例
    echo "Hello"; echo "World"
    

&

  • 含义:将命令放到后台运行。
  • 示例
    sleep 10 &
    

&&

  • 含义:逻辑与,只有前一个命令成功(返回 0)才会执行下一个命令。
  • 示例
    mkdir mydir && cd mydir
    

||

  • 含义:逻辑或,只有前一个命令失败(返回非 0)才会执行下一个命令。
  • 示例
    mkdir mydir || echo "Failed to create directory"
    

|

  • 含义:管道,将前一个命令的输出作为下一个命令的输入。
  • 示例
    ls | grep .txt
    

>

  • 含义:输出重定向,将命令的输出写入文件(覆盖)。
  • 示例
    echo "Hello" > output.txt
    

>>

  • 含义:输出重定向,将命令的输出追加到文件。
  • 示例
    echo "World" >> output.txt
    

<

  • 含义:输入重定向,将文件内容作为命令的输入。
  • 示例
    wc -l < input.txt
    

$()

  • 含义:命令替换,执行命令并将其输出作为字符串。
  • 示例
    echo "Today is $(date)"
    

`

  • 含义:命令替换的旧语法,功能与 $() 相同。
  • 示例
    echo "Today is `date`"
    

{}

  • 含义:用于生成序列或范围。
  • 示例
    echo {1..5}  # 输出 1 2 3 4 5
    

*

  • 含义:通配符,匹配任意字符。
  • 示例
    ls *.txt  # 列出所有 .txt 文件
    

?

  • 含义:通配符,匹配单个字符。
  • 示例
    ls file?.txt  # 匹配 file1.txt, file2.txt 等
    

[]

  • 含义:通配符,匹配指定范围内的单个字符。
  • 示例
    ls file[1-3].txt  # 匹配 file1.txt, file2.txt, file3.txt
    

~

  • 含义:当前用户的主目录。
  • 示例
    cd ~  # 切换到当前用户的主目录
    

!

  • 含义:历史命令扩展。
  • 示例
    !!    # 执行上一条命令
    !ls   # 执行最近一条以 ls 开头的命令
    

3. 其他符号

"

  • 含义:双引号,允许变量扩展。
  • 示例
    name="World"
    echo "Hello $name"  # 输出 Hello World
    

'

  • 含义:单引号,禁止变量扩展。
  • 示例
    name="World"
    echo 'Hello $name'  # 输出 Hello $name
    

\

  • 含义:转义字符,用于取消特殊字符的含义。
  • 示例
    echo "This is a \"quote\""  # 输出 This is a "quote"
    

总结

Shell 中的特殊符号和变量提供了强大的功能,可以用于控制脚本行为、处理输入输出、执行命令等。熟练掌握这些符号和变量,可以显著提高脚本编写和命令行操作的效率。