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