2

我有以下 Windows 批处理文件:

set url=http://localhost:20013

wsimport -keep -s . %url%/WSInicioDeSesion?wsdl
rm ws/*.class

当我尝试制作它的 shell 脚本版本时,它失败了。这是我的 shell 脚本:

#!bin/sh

#here i set the path variable, not important

URL="http://localhost:20013"
wsimport -keep -s . $URL/WSInicioDeSesion?wsdl

但是,如果我尝试 echo: ${URL}abcdit prints abcd://localhost:20013,似乎变量替换出错了,这是怎么回事?

编辑:对不起,我复制/粘贴了第二部分错误,这就是它的样子。

所以我也尝试了类似rm {$URL}.txt的东西,令我惊讶的是它说找不到文件'http://localhost:20013\r.txt\r',为什么要添加回车符每个句子?会不会是编辑?

4

3 回答 3

1

您对问题的最后一次编辑似乎终于揭示了问题的实际原因。

您的shell 脚本可能已使用Windows 样式的换行符保存\r\n,即回车控制字符后跟换行控制字符。Unix 世界只使用\n. 因此,实际存储到URL变量中的值可能不仅仅是(其中http://localhost:20013代表回车字符)。这也解释了打印输出:值末尾的 CR 字符将光标移动到行首,并简单地覆盖初始的。http://localhost:20013^R^Recho ${URL}abcdabcd://localhost:20013${URL}abcdhttp

我认为如果你在几乎任何流行的 Linux 文本编辑器中打开脚本,你应该能够看到那些额外的\r符号为^Rs。好吧,至少,这就是我记得在打开从某些 Windows 机器传输的文本文件时在 Midnight Commander 的内置编辑器和其他一些控制台编辑器中看到的内容。而且,当然,您也应该能够删除这些字符(在您的情况下应该这样做以解决问题)。

于 2012-10-27T18:58:08.410 回答
0

我必须从您的示例中更改的唯一一件事是 #! 行到 #!/bin/sh

#!/bin/sh

#here i set the path variable, not important

URL="http://localhost:20013/WSInicioDeSesion?wsdl"
echo ${URL}abcd

为我打印出 'http://localhost:20013/WSInicioDeSesion?wsdlabcd'

于 2012-10-26T18:23:03.857 回答
0

wsimport wsimport -keep -s . $URL/WSInicioDeSesion?wsdl可能应该是wsimport -keep -s "." "${URL}"虽然我无法复制你正在做的事情。以下/变量引用可能意味着您正在替换文本。我总是用符号指定变量${}以避免这样的事情。

于 2012-10-26T18:25:58.223 回答