如何通过回声将两个变量联机?

How to oneline two variables via echo?

我尝试搜索文件并将路径和版本分开作为变量,因为稍后创建目录和将 .jar 解压缩到所需路径时都需要用到它们。

file=$(find /home/user/Documents/test/ -path *.jar)
version=$(echo "$file" | grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(echo "$file" | sed 's/\(.*\)[/].*//') 
newpath=$(echo "${path}/${version}")
echo "$newpath"

结果

> /home/user/Documents/test/gb0500
> /home/user/Documents/test/gb0500 /home/user/Documents/test/gb0500
> /home/user/Documents/test /home/user/Documents/test/1.3.2.0
> 1.3.2.1
> 1.3.2.2
> 1.2.0.0
> 1.3.0.0

搞笑的是,它只在一条线上工作。 我还尝试了什么:

file=$(find /home/v990549/Dokumente/test/ -path *.jar)
version=$(grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(sed 's/\(.*\)[/].*//')

while read $file
do
  echo "$path$version"
done

我没有编写脚本的经验。这就是我几天前想出来的。我只是在练习,努力让生活更轻松。

查找输出:

/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.0-javadoc.jar
/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.1-javadoc.jar
/home/user/Documents/test/gb0500/gb0500-koetlin-log4j2-web-1.3.2.2-javadoc.jar
/home/user/Documents/test/gb0500-co-log4j2-web-1.2.0.0-javadoc.jar
/home/user/Documents/test/gb0500-commons-log4j2-web-1.3.0.0-javadoc.jar

由于 versionpath 两个变量都是换行分隔的,如何:

file=$(find /home/user/Documents/test/ -path *.jar)
version=$(echo "$file" | grep -P -o '[0-9].[0-9].[0-9].[0-9]')
path=$(echo "$file" | sed 's/\(.*\)[/].*//')
paste -d "/" <(echo "$path") <(echo "$version")

结果:

/home/user/Documents/test/gb0500/1.3.2.0
/home/user/Documents/test/gb0500/1.3.2.1
/home/user/Documents/test/gb0500/1.3.2.2
/home/user/Documents/test/1.2.0.0
/home/user/Documents/test/1.3.0.0

顺便说一句,我不建议将多个文件名存储在一个变量中 由于以下几个原因,作为换行符分隔的变量:

  • 文件名可能包含换行符。
  • 操纵每一行的值并不容易。 例如你可以简单地说 第三行为 path=${file%/*} 如果 file 只包含一个。

希望对您有所帮助。