linux shell脚本中的字符串追加

linux shell脚本中的字符串追加,linux,sh,Linux,Sh,我正在编写Linux shell脚本来测试上传文件 在我们将文件上传到存储系统之前,我需要使用rest full service获取存储url,获取url成功。在存储url中,我想附加一个字符串 Url=$(grep "X-Storage-Url" swiftAuth.txt) //read url value from file storageFileUrl=${storageUrl#*:} //remove extra string before : echo $storageFileU

我正在编写Linux shell脚本来测试上传文件

在我们将文件上传到存储系统之前,我需要使用rest full service获取存储url,获取url成功。在存储url中,我想附加一个字符串

Url=$(grep "X-Storage-Url" swiftAuth.txt)  //read url value from file
storageFileUrl=${storageUrl#*:}  //remove extra string before :
echo $storageFileUrl"/111" 
url就像

所以,当我试图在运行时追加字符串时,它给了我错误的值 结果是:

/111s://cloudstorage.com/auth/1.0 
以上结果是错误的,我想要的结果

https://cloudstorage.com/auth/1.0/111
请帮帮我


谢谢。

不,您没有得到
/111s://cloudstorage.com/auth/1.0
。您将获得
https://cloudstorage.com/auth/1.0␍/111

是回车符,也称为Ctrl-M或
^M

Bash认为这是一个正则字符。您只需通过
${storageFileUrl%␍}。您可以键入
在命令行、vim或emacs中使用组合Ctrl-VCtrl-M

或者您可以使用
recode
dos2unix
或类似工具来摆脱␍s在初始grep的输入中

或者,您可以使用sed将grep和剥离合并为一个步骤,从而可以处理␍ 您也可以(使用URL不能包含空格的事实):


注意:MIME指定␍␊ 标题的行结尾,Unix仅使用␊, 因此,人们希望看到␍在那里。

Try:storageFileUrl=${storageUrl#*:}/111?如果这是一个bash脚本,请将
#!/bin/bash-vx
放在它的第一行(用于调试目的)然后再运行它。你会得到shell正在做什么的痕迹。在你的情况下,也可以考虑使用<代码> AWK < />代码。这会使shell脚本变短。或者甚至使它成为<代码> AWK < /代码>。script@BasileStarynkevitch这是相同的老问题。从中读取值的文件有
CR+LF
行结尾。
storageFileUrl=$(sed -n 's/X-Storage-Url:[ \t]*\([^ \t\r]*\).*/\1/p')