我正在尝试将文件复制boot-1.5-SNAPSHOT.jar到boot-1.5.jar.
我已经尝试过使用,sed但出现错误。我知道语法不正确,我希望有人可以为我完成它。
cp boot-* | sed -e 's:-SNAPSHOT::g'
cp: missing destination file operand after ‘boot-1.5-SNAPSHOT.jar’
Run Code Online (Sandbox Code Playgroud)
这样做的想法是脚本不知道版本号,只是 jar 将位于它试图从中复制文件的文件夹中。这就是我使用星号的原因。版本号变化非常频繁,因此cp file file2无法使用。
不需要sed,使用参数扩展:
$ file=boot-1.5-SNAPSHOT.jar
$ echo ${file/-SNAPSHOT/}
boot-1.5.jar
Run Code Online (Sandbox Code Playgroud)
或者
$ cp "$file" "${file/-SNAPSHOT/}"
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
${参数/模式/字符串}
模式替换。 模式被扩展以产生一个模式,就像在路径名扩展中一样。参数被扩展,并且模式与其值的最长匹配被替换为字符串。
请注意,由于您正在处理文件,因此应该引用变量(否则带有空格字符的文件会将事情搞砸)。
此外,您可能应该创建一个符号链接而不是副本:
$ ln -s "$file" "${file/-SNAPSHOT/}"
Run Code Online (Sandbox Code Playgroud)