我想使用参数扩展在最后一个分隔符上剪切字符串。
name='ls $(Build.ArtifactStagingDirectory)/drop/abc.jar'
string1="${name%/*}"
string2="${name##*/}"
echo "$string1"
$ echo "$string2"
我需要输出abc.jar
但我越来越.jar
答案1
$name
如果您在某个时刻从 Windows 系统上创建的文本文件中获取字符串的开头,然后将其添加.jar
到其末尾,则在abc
字符串的位和最终的.jar
。
您提取的字符串$string2
将包含字符
abc\r.jar
其中\r
代表文字回车符。
当用 输出时echo
,光标会通过回车符返回到行首,最后的.jar
会覆盖最初的abc
,只留下.jar
可见的。
解决方案是将提供初始文件名的任何文件从 DOS/Windows 文本格式转换为 Unix 文本格式。最好使用dos2unix
转换工具来完成此操作。
您还可以使用以下命令删除字符串中的所有回车符
string2=${string2//$'\r'/}
在输出其值之前在bash
shell 中,或者使用
tr -d '\r' <<<"$string2"
答案2
如果目标是从有效文件名中获取“abc.jar”,请使用基本名称命令:
string2=`basename $name`