Bash脚本似乎忽略了第一个变量

时间:2018-05-20 18:16:30

标签: linux bash ubuntu

我正在尝试创建一个简单的脚本在我的服务器和主计算机之间交换以编译nginx,但每次运行脚本时,它都会忽略$ nginxsrc中的第一个变量$ code。 我剥离了构建的东西,因为它与问题无关。

#!/bin/bash
home="/home/michael"
code="/src/nginx"
NGINX="nginx-1.13.11"
nginxsrc="$code/$NGINX"
echo "$code"
echo "$NGINX"
echo "$nginxsrc"

以下是运行时会发生的情况:

$ sudo bash /usr/local/bin/build-nginx
/src/nginx
nginx-1.13.11
/nginx-1.13.11

我已尝试将它们放入{},如下所示:nginxsrc =“$ {code} / $ {NGINX}”

我尝试过使用和不使用引号:nginxsrc = $ code / $ NGINX

我的服务器正在运行带有所有最新更新的ubuntu 16.04.4 LTS 64位。

Bash版本是4.3.48

显然预期的结果是:

/src/nginx
nginx-1.13.11
/src/nginx/nginx-1.13.11

1 个答案:

答案 0 :(得分:2)

当你的文件中有回车时会发生这种情况 - 你的文件是用DOS风格的行结尾保存的:

显示这样的文件:

$ cat -e cr.sh
code="/src/nginx"^M$
NGINX="nginx-1.13.11"^M$
nginxsrc="$code/$NGINX"^M$
echo "$code"^M$
echo "$NGINX"^M$
echo "$nginxsrc"^M$

并使用跟踪

运行它
$ bash -x cr.sh
+ code=$'/src/nginx\r'
+ NGINX=$'nginx-1.13.11\r'
+ nginxsrc=$'/src/nginx\r/nginx-1.13.11\r\r'
+ echo $'/src/nginx\r\r'
/src/nginx
+ echo $'nginx-1.13.11\r\r'
nginx-1.13.11
+ echo $'/src/nginx\r/nginx-1.13.11\r\r\r'
/nginx-1.13.11

在编辑器中编辑文件,您可以在其中设置“unix”行结尾,或者使用dos2unix或者其固定 sed -i 's/\r$//'