Shell扩展机制详解:路径名、花括号、参数、算术与命令替换
2026/7/25 19:58:36 网站建设 项目流程

什么是 Shell 扩展

当我们按下回车键执行命令时,Bash 并不会直接运行我们输入的原始字符。相反,它会先对命令文本进行一系列的自动替换,这个预处理过程称为扩展(Expansion)。例如,echo *并不会输出星号,而是输出当前目录下的所有文件名——因为*被扩展成了匹配的文件名列表。

扩展使得命令行拥有强大的动态能力,但如果不理解其规则,很容易产生意料之外的结果。本文以 Bash 为例,详解五种核心扩展类型及其行为差异。

路径名扩展:通配符与文件名匹配

路径名扩展是指 shell 将包含通配符的模式替换为匹配的文件名列表。常用的通配符有*(匹配任意字符)、?(匹配单个字符)以及字符类[abc][[:upper:]]等。

$echo* Desktop Documents ls-output.txt Music Pictures Public Templates Videos $echoD* Desktop Documents $echo*s Documents Pictures Templates Videos $echo[[:upper:]]* Desktop Documents Music Pictures Public Templates Videos $echo/usr/*/share /usr/kerberos/share /usr/local/share

如果模式没有匹配到任何文件,在默认配置下(nullglob未开启),模式会原样保留,而不是被替换为空。

隐藏文件的特殊处理

以点号开头的隐藏文件默认不会被*匹配。如果我们想列举隐藏文件,容易想到echo .*。但注意:如果未设置globskipdots选项(Bash 5.2 之后的默认行为),.*会匹配到...,这通常不是我们想要的。

更安全的做法是使用.[!.]*:匹配只以单点开头、后面不是点的文件名。

$echo.[!.]* .bashrc .config .local

ls -A命令提供了正确列出隐藏文件的功能(排除...)。

波浪线扩展

当单词以~开头时,shell 会将其扩展为对应用户的家目录。如果没有指定用户名,则扩展为当前用户的家目录。

$echo~ /home/me $echo~bob /home/bob

算术扩展:整数运算

算术扩展允许在 shell 中直接进行整数计算,格式为$(( expression ))。支持的运算符包括加减乘除、取模、幂运算等。

运算符说明
+加法
-减法
*乘法
/除法(整数除法,结果取整)
%取模(余数)
**幂运算
$echo$((2+2))

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询