Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何通过echo将两个变量连接成一行?_Bash_Shell_Echo - Fatal编程技术网

Bash 如何通过echo将两个变量连接成一行?

Bash 如何通过echo将两个变量连接成一行?,bash,shell,echo,Bash,Shell,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/\(.*\)[/].*/\1/') newpath=$(echo "${path}/${versio

我尝试搜索文件,并将路径和版本分离为变量,因为以后创建目录和解压缩所需路径中的.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/\(.*\)[/].*/\1/') 
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/\(.*\)[/].*/\1/')

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

由于变量
version
path
都是换行分隔的,那么:

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/\(.*\)[/].*/\1/')
paste -d "/" <(echo "$path") <(echo "$version")
顺便说一句,我不建议在一个变量中存储多个文件名 作为换行分隔变量,原因如下:

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

希望这能有所帮助。

这个脚本有很多问题,我不知道从哪里开始至少给我们看一段
查找
的输出,这样我们可以尝试帮助这里有很多东西需要引用才能正常工作。试着从中寻找建议。啊,好吧。。。我懂了。。我已经引用过一次,但在测试其他东西时,我忘了把它加回去。是的,你是对的。我错了。版本是唯一在长度和格式上总是相同的东西。我只是拿了一个.jar文件,并为实验目的进行了编辑。所以名字总是不同的。我的目标是观察是否上传了一个新的.jar文件,并将其解压缩到.jar文件所在的目录中。新目录的名称中有版本,因为我需要为我们的存储库对其进行符号链接。这确实有帮助。这向我表明,我离我想要的结果并不遥远。我只是从来没有用过“粘贴”,因为我还没听说过。是的,你就快到了。正如您将看到的,前三行没有改变。如果有帮助的话,我很高兴。我希望您会喜欢bash脚本。
/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