无法将变量传递到.SH文件中的CURL中。在Bash中工作

无法将变量传递到.SH文件中的CURL中。在Bash中工作,bash,curl,cygwin,Bash,Curl,Cygwin,这段代码直接在Bash中工作 $ var=/2013/08/21/politics/nsa-fisa-court/index.html $ curl www.cnn.com/$var 但是,如果我将确切的代码放入.SH文件并从Bash调用它,我会得到: curl:(52)来自服务器的空回复 我做错了什么?你需要用引号来修正它们a.sh可能如下所示: #!/bin/sh var="/2013/08/21/politics/nsa-fisa-court/index.html" curl www.

这段代码直接在Bash中工作

$ var=/2013/08/21/politics/nsa-fisa-court/index.html
$ curl www.cnn.com/$var
但是,如果我将确切的代码放入.SH文件并从Bash调用它,我会得到:

curl:(52)来自服务器的空回复


我做错了什么?

你需要用引号来修正它们
a.sh
可能如下所示:

#!/bin/sh

var="/2013/08/21/politics/nsa-fisa-court/index.html"
curl www.cnn.com/"$var"
更改文件的权限

chmod a+x a.sh

然后执行
/a.sh

set-xv
放在文件开头,并在文件结尾执行
set+xv
set-xv
将启用详细和调试

在shell脚本中的每一行执行之前,它将向您显示在插入变量、全局变量、模式等之前该行的外观,以及之后它们的外观

这可能不是你期望的台词

另外,您使用什么编辑器来构建shell脚本?如果您在Windows上使用记事本创建shell脚本,然后将其发布到Linux机器上(或使用cygwin),则会出现不正确的行尾。如果你有错误的行尾,你会看到各种各样无法解释的错误


顺便说一句,引用不会有任何区别。虽然这是一个好主意,但变量值中的空格没有问题。

您创建的文件,
a.sh
中有windows行结尾(CR-LF),这会导致curl请求一个结尾带有CR的URL,CNN的
nginx
服务器将其视为错误


使用
dos2unix
(或等效工具)修复行结尾,应该可以正常工作。

谢谢,但仍然不起作用。我的代码与你的代码一模一样:
var=“/2013/08/21/politics/nsa fisa court/index.html”curl www.cnn.com/“$var”
,除了我得到:
me@me/cygdrive/c/cygwin64/bin$。/a.sh curl:(52)来自服务器的空回复
我认为它没有权限,因为如果我运行相同的代码而没有变量,它就可以工作fine@iamauser:不需要引用没有空格或shell元字符的字符串。你可以这样做,但这绝对没有什么区别。嗯,我按建议加入了set-xv,但收到了
me@me/cygdrive/c/cygwin64/bin$。/a.sh:无效选项开始:-设置:用法:设置[-abefhkmnptuvxBCHP][o选项名称][arg…]。/a.sh:第2行:$:未找到命令。/a.sh:第3行:$:未找到命令
是,我使用了记事本(在不涉及变量的情况下效果很好)。也许这就是原因。@user2029890-永远不要使用记事本。你应该使用编程编辑器。试试看,你可以设置行尾,加上它有语法着色和自动缩进。它是fre,在Windows上工作。