序号 | Shell特殊字符 | 具体解释 | 具体示例 | 注解 |
---|---|---|---|---|
1 | $ | 变量替换 | echo $UID | 输出当前用户的UID |
2 | & | 后台运行 | ls & | 将ls命令放入后台执行 |
3 | ; | 命令分隔符 | echo Hello; echo World | 依次执行多个命令 |
4 | | | 管道 | ls | grep filename | 将ls命令的输出作为grep命令的输入 |
5 | > | 输出重定向 | echo Hello > file.txt | 将输出写入文件 |
6 | < | 输入重定向 | cat < file.txt | 从文件读取输入 |
7 | ` | 命令替换 | echo `date | 将date命令的输出作为echo命令的输入 |
8 | \ (反斜杠) | 转义字符 | echo \$UID | 显示字面上的$UID |
9 | ( ) | 子shell | (cd /tmp; ls) | 在子shell中执行命令 |
10 | [ ] | 条件测试 | [ -f file.txt ] | 测试文件是否存在 |
11 | { } | 命令块 | { echo Hello; echo World; } | 将多条命令组合在一起执行 |
12 | " " | 双引号 | echo "Hello World" | 保留引号内的空格和特殊字符 |
13 | ’ ’ | 单引号 | echo 'Hello World' | 保留引号内的所有字符 |
14 | # | 注释 | # This is a comment | 注释一行内容 |
15 | * | 通配符 | ls *.txt | 匹配所有以.txt结尾的文件 |
16 | ? | 单字符通配符 | ls file?.txt | 匹配file1.txt, file2.txt等单字符文件名 |
17 | ~ | 家目录 | cd ~ | 切换到当前用户的家目录 |
18 | ! | 历史命令 | echo ! | 引用上一条命令 |
19 | 逻辑或 | |||
20 | && | 逻辑与 | true && echo "Success" | 如果第一个命令成功则执行第二个命令 |
21 | >> | 追加输出 | echo Hello >> file.txt | 将输出追加到文件末尾 |
22 | 2> | 错误重定向 | ls non_existent_file 2> error.txt | 将错误输出写入文件 |
23 | 2>&1 | 合并输出 | ls non_existent_file > output.txt 2>&1 | 将标准输出和错误输出合并到一个文件 |
24 | <> | 输入输出重定向 | sort < file.txt > sorted_file.txt | 从一个文件读取并将输出写入另一个文件 |
25 | << | Here文档 | cat << EOF ... EOF | 从多行输入读取内容 |
26 | <<< | Here字符串 | grep foo <<< "foo bar baz" | 从字符串中读取输入 |
27 | >& | 标准输出重定向 | command >& file.txt | 将标准输出重定向到文件 |
28 | |& | 标准输出和错误重定向 | command1 |& command2 | 将标准输出和错误输出通过管道传递 |
29 | - | 选项 | ls -l | 使用选项 |
30 | – | 长选项或停止解析选项 | command --option | 使用长选项或停止解析选项 |
31 | : | 空命令 | : echo "This is a no-op" | 空操作,什么也不做 |
32 | @ | 数组所有元素 | for i in "${array[@]}" | 引用数组中的所有元素 |
33 | + | 算术运算 | echo $((3 + 5)) | 计算表达式的值 |
34 | = | 赋值 | VAR=value | 给变量赋值 |
35 | ^ | 字符替换 | tr 'a-z' 'A-Z' <<< "hello" | 将小写字母转换为大写字母 |
36 | % | 字符串截取 | echo ${VAR%.*} | 去掉变量值中最后一个.及其右边的部分 |
37 | , | 序列展开 | echo {1..10} | 展开为序列1 2 3 … 10 |
38 | | | 转义字符 | sed 's/|/\|/g' | 转义管道符号以在sed命令中使用 |
39 | ^ | 行首匹配 | grep '^pattern' file.txt | 匹配以pattern开头的行 |
40 | $() | 命令替换 | files=$(ls) | 将命令的输出赋值给变量 |
41 | ${} | 变量替换 | echo ${VAR} | 显示变量的值 |
42 | $(()) | 算术扩展 | echo $((1 + 2)) | 计算表达式的值 |
43 | ${!} | 间接变量 | echo ${!VAR*} | 显示所有以VAR开头的变量名 |
44 | ${#} | 字符串长度 | echo ${#VAR} | 显示变量值的长度 |
45 | ${VAR} | 参数扩展 | echo ${VAR:-default} | 如果变量为空则使用默认值 |
46 | [[]] | 条件测试 | if [[ -f file.txt ]]; then ... | 高级条件测试 |
47 | &&& | 多重逻辑与 | command1 && command2 && command3 | 顺序执行多个命令,若前一个失败则停止 |
48 | ||||
49 | <( ) | 进程替换 | diff <(ls dir1) <(ls dir2) | 比较两个目录的内容 |
50 | >>( ) | 进程替换 | tee >(command) | 将输出重定向到命令 |