通配符用于模式匹配,常用于文件名扩展:
*
- 匹配任意数量的任意字符(包括零个字符)
ls *.txt
列出所有.txt文件?
- 匹配任意单个字符
ls file?.txt
匹配file1.txt、fileA.txt等[]
- 匹配括号内的任意一个字符
ls file[123].txt
匹配file1.txt、file2.txt、file3.txt[a-z]
、[0-9]
、[A-Za-z0-9]
[!0-9]
匹配非数字字符{}
- 生成组合匹配
ls file{1,2,3}.txt
相当于file1.txt file2.txt file3.txt{1..5}
生成1 2 3 4 5元字符对shell有特殊意义:
|
- 管道,将一个命令的输出作为另一个命令的输入
cat file.txt | grep "pattern"
>
- 输出重定向(覆盖)
echo "text" > file.txt
>>
- 输出重定向(追加)
echo "more text" >> file.txt
<
- 输入重定向
wc -l < file.txt
;
- 命令分隔符,在一行中执行多个命令
command1; command2
&
- 后台执行
long_running_command &
&&
- 逻辑与,前一个命令成功才执行后一个
command1 && command2
||
- 逻辑或,前一个命令失败才执行后一个
command1 || command2
$
- 变量引用
echo $PATH
#
- 注释符号
# 这是一条注释
!
- 历史命令引用或逻辑非
!123
执行历史记录中第123条命令[ ! -f file.txt ]
检查文件不存在用于取消字符的特殊含义:
\
- 反斜杠,转义单个字符
echo \$PATH
输出$PATH而不是变量值''
- 单引号,强引用,内部所有字符都作为普通字符
echo '$PATH'
输出$PATH""
- 双引号,弱引用,内部变量和命令替换仍会解析
echo "$PATH"
输出PATH变量的值`
- 反引号,用于命令替换(推荐使用$()替代)
echo "Today is
date"
echo "Today is $(date)"
echo "He said, \"Hello\""
理解这些字符的用法对于编写shell脚本和高效使用命令行至关重要。