bash脚本中. <(命令)写法的含义是什么?是否有专有名称?
Bash 语法解答
语法本质说明
你观察到的. <并不是一套完整的固定语法,是两个独立的 Bash 特性组合后产生的视觉效果,二者之间有空格分隔,分别是:
- 点命令
.:是内置命令source的简写,作用是在当前 shell 进程中读取并执行指定文件的所有代码,不会启动子进程运行,因此文件内定义的变量、函数、别名都会在当前 shell 环境中直接生效。 - 进程替换
<(命令):这是 Bash、Zsh、Ksh 等支持的非 POSIX 标准特性,专门名称就是进程替换。作用是将括号内命令的标准输出内容,映射为一个临时的可读取文件描述符(可以近似理解为系统生成的一个临时只读文件),可以直接作为需要接收文件路径作为参数的命令的输入。
这段代码的运行逻辑
你贴的函数实际执行流程如下:
- 调用
obj函数时传入第一个参数(比如执行obj User,那么$1的值就是User) - 首先运行
sed "s/obj/$1/g" obj.class:将obj.class文件中所有的obj字符串替换为传入的参数值 - 进程替换
<(sed ...)会把 sed 输出的替换后的内容,包装成一个临时文件路径 - 点命令
.读取这个临时文件的内容,在当前 shell 中直接执行,相当于动态生成了对应名称的类相关函数/变量,实现面向对象的模拟效果
补充注意点
- 进程替换不属于 POSIX shell 标准语法,在纯 sh 环境下运行会报错,需要显式用 Bash 执行脚本
- 语法书写时要求严格:点命令和后续的路径/进程替换语法之间必须有空格,
<和(之间不能有空格,否则会触发语法错误
内容的提问来源于stack exchange,提问作者Itération 122442
相关产品推荐
相关产品推荐

