如何通过回声将两个变量联机?
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
由于 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/\(.*\)[/].*//')
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
只包含一个。
希望对您有所帮助。
我尝试搜索文件并将路径和版本分开作为变量,因为稍后创建目录和将 .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
由于 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/\(.*\)[/].*//')
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
只包含一个。
希望对您有所帮助。