Bash脚本拼接变量时首个变量$code被忽略问题求助
问题诊断与解决方案
看起来你的问题出在$code变量里可能包含了隐藏的回车符(\r),这会导致变量拼接后输出时出现"覆盖"的视觉效果——其实$code的内容是存在的,但\r会把光标移到行首,后面的/$NGINX部分会覆盖掉前面的/src/nginx,看起来就像$code被忽略了。
验证问题
先运行这个命令检查你的脚本文件里是否有Windows风格的换行符(CRLF):
cat -A /usr/local/bin/build-nginx
如果看到code="/src/nginx"^M这样的行(末尾的^M就是回车符),那就能确认问题所在了——你的脚本可能是在Windows环境下编辑后传到Ubuntu服务器的,导致换行符变成了\r\n而不是Unix的\n。
解决方法
方法1:转换脚本的换行符为Unix格式
用dos2unix工具转换脚本(如果没安装,先运行sudo apt install dos2unix):
dos2unix /usr/local/bin/build-nginx
如果没有dos2unix,也可以用sed命令替换掉所有的回车符:
sed -i 's/\r$//' /usr/local/bin/build-nginx
方法2:在脚本内清理变量
如果不想修改脚本文件格式,可以在定义code变量后添加一行清理操作,去掉可能存在的回车符:
code="/src/nginx" # 去掉变量中的回车符 code=$(echo "$code" | tr -d '\r')
测试验证
修改后重新运行脚本:
sudo bash /usr/local/bin/build-nginx
应该就能得到你预期的输出:
/src/nginx nginx-1.13.11 /src/nginx/nginx-1.13.11
内容的提问来源于stack exchange,提问作者RVOtakuMike
相关产品推荐
相关产品推荐

