此代码直接在Bash中使用。
$ var=/2013/08/21/politics/nsa-fisa-court/index.html
$ curl www.cnn.com/$var
但是,如果我将确切的代码放入 .SH 文件并从Bash调用它,我会得到:
curl:(52)来自服务器的空回复
我做错了什么?
答案 0 :(得分:2)
您创建的文件a.sh
在其中有窗口行结尾(CR-LF),这会导致curl在结尾处请求带有CR的URL,这被{视为错误{1}}属于CNN的服务器。
使用nginx
(或等效的)修复行结尾,它应该可以正常工作。
答案 1 :(得分:0)
您需要使用引号修复它们。 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
答案 2 :(得分:0)
将set -xv
放在文件的开头,将set +xv
放在最后。 set -xv
将打开详细和调试。
在shell脚本中的每一行执行之前,它会显示插入变量,globs,pattern等之前的行,以及之后的样子。
可能不是你期望的那条线。
另外,您使用什么编辑器来构建shell脚本?如果您在Windows上使用记事本创建shell脚本然后将其发布到Linux计算机(或使用cygwin),则会出现错误的行结尾。如果你有错误的行结尾,你会看到各种无法解释的错误。
顺便说一句,报价不会有任何区别。虽然这是一个好主意,但变量值中的空格没有问题。