Как отключить две переменные через эхо? - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь найти файлы и отдельный путь и версию как переменную, потому что каждый из них понадобится позже для создания каталога и для распаковки .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

1 Ответ

0 голосов
/ 31 октября 2019

Поскольку обе переменные 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")

Результат:

/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 содержит только одну.

Надеюсь, это поможет.

...