执行sed -e命令后得到空文件,原因是什么?
问题原因
你脚本里的错误在于sed -e "s:@NAME@:${name}:g"这行末尾多了一个管道符|。管道符的作用是将前一个命令的输出作为后一个命令的输入,但你在这个管道符后面直接写了重定向>> "${full_file}",没有对应的命令接收前序输出,导致sed处理后的内容被丢弃,最终${full_file}为空。
修正后的脚本
把多余的管道符删掉即可:
name="Alin" full_file="$(mktemp)" cat file | \ sed -e "s:@NAME@:${name}:g" \ >> "${full_file}" cat "${full_file}"
另外,也可以简化写法,去掉不必要的cat,直接让sed读取file:
name="Alin" full_file="$(mktemp)" sed -e "s:@NAME@:${name}:g" file >> "${full_file}" cat "${full_file}"
执行修正后的脚本,${full_file}里就会得到你期望的内容:
my name is: Alin
内容的提问来源于stack exchange,提问作者user123454321
相关产品推荐
相关产品推荐

