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