gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:42 25 4
gpt4 key购买 nike

我正在尝试制作一个简单的脚本来在我的服务器和主计算机之间交换以编译 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

最佳答案

当您的文件中有回车符时会发生这种情况——您的文件是以 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$//'

关于linux - Bash 脚本似乎忽略了第一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com