文件中的参数扩展插入剪切

文件中的参数扩展插入剪切

我想使用参数扩展在最后一个分隔符上剪切字符串。

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'/}

在输出其值之前在bashshell 中,或者使用

tr -d '\r' <<<"$string2"

答案2

如果目标是从有效文件名中获取“abc.jar”,请使用基本名称命令:

string2=`basename $name`

相关内容