Bash行首放置<输入重定向符的sed命令语法含义解析
Bash行首输入重定向写法说明
行首<运算符的作用
Shell解析命令行时,重定向运算符的位置没有强制要求必须放在命令参数末尾,放在行首、命令与参数之间、参数末尾均为合法语法,执行效果完全一致。< "$API_FILE"属于标准输入重定向操作:
- 作用是将
$API_FILE变量指向的文件,绑定到后续sed命令的标准输入(stdin)流,让sed从该文件读取待处理的原始文本。
两种sed写法的等价性判断
原脚本写法:
< "$API_FILE" sed -E "s/YOUR-PROJECT-ID/${project_id}/g" > "$TEMP_FILE"
对照写法:
sed -E "s/YOUR-PROJECT-ID/${project_id}/g" "$API_FILE" > "$TEMP_FILE"
在标准sed实现(包括GNU sed、BSD sed)环境下,两条命令执行效果完全等价。
等价逻辑说明
sed的内容读取规则非常明确:
- 如果执行时传入了文件路径作为位置参数,sed会直接打开对应文件读取内容做处理
- 如果没有传入任何输入文件参数,sed会默认从标准输入流读取内容做处理
原脚本写法没有给sed传入文件参数,通过输入重定向把目标文件内容导入sed的标准输入;对照写法直接把文件路径作为参数传给sed,由sed自行打开文件读取。两者处理后的输出都会通过>重定向写入$TEMP_FILE,最终字符串替换的结果没有任何差异。
脚本作者把输入重定向放在行首只是个人编码风格偏好,不存在特殊语法逻辑,实际编写脚本时两种写法可以随意选用。
内容的提问来源于stack exchange,提问作者Oscar Amezcua
相关产品推荐
相关产品推荐

