如何在Bash Shell中写入含变量的文件?脚本执行异常求助
问题排查与修复方案
嘿,你的问题根源其实是脚本的语法格式错误——shebang行和后续的命令写在了同一行,导致shell没法正确解析变量赋值和echo命令。
先看你原来的错误脚本:
#! /bin/bash var=12345 echo -e "first sentence second sentence $var:$var th sentence "
修复后的正确脚本
把每个操作拆成单独的行就好啦:
#! /bin/bash var=12345 echo -e "first sentence second sentence $var:$var th sentence "
为啥命令行执行正常,存成sh文件就不行?
你在命令行手动执行时,其实是隐含地把命令分开处理了(要么分多行,要么用分号分隔):
var=12345; echo -e "first sentence second sentence $var:$var th sentence "
这种情况下shell会先完成var=12345的变量赋值,再执行echo,自然能正确输出变量值。
但存成sh文件时,你把所有内容堆在了shebang行后面——shebang的规则是#! 解释器路径,后面的内容会被当作解释器的启动参数,而不是脚本里要执行的命令。也就是说,你的脚本相当于让bash去处理var=12345这个参数,然后执行echo,但此时var根本没在脚本的运行环境里被定义,所以$var就被解析成空字符串,结果就缺失了变量内容。
小补充:如果想写单行命令怎么办?
要是你偏好把命令写在一行,记得给shebang单独留一行,然后用分号分隔命令:
#! /bin/bash var=12345; echo -e "first sentence second sentence $var:$var th sentence "
这样shell就能按顺序执行赋值和输出操作啦。
内容的提问来源于stack exchange,提问作者Gavin Hwang
相关产品推荐
相关产品推荐

