Необходимо извлечь часть строки с помощью оболочки

У меня есть сценарий, как,

#/bin/bash -x LASTBUILD=' 174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' echo "this is the LASTBUILD ============== $LASTBUILD" LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 echo "this is the LATESTBUILD ############### $LATESTBUILD" 

После выполнения показывает результат, как показано ниже,

 [root@root ~]# echo $LATESTBUILD [root@root ~]# 

Мой ожидаемый результат, как показано ниже,

 [root@root ~]# echo $LATESTBUILD gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz [root@root ~]# 

Приведенный выше код не работает.

PS: также пытался использовать awk, но не работал,

 LATESTBUILD=$LASTBUILD | awk -F '/' '{print $5}' 

Есть несколько проблем с вашим скриптом:

  1. Ваш hash-взрыв недействителен. У вас есть #/bin/bash -x и это должно быть #!/bin/bash -x
  2. Ваша переменная LASTBUILD странная. Каждый столбец разделен двойными пробелами, что приведет к странным действиям cut , и вы также не хотите, чтобы в нем была новая строка с cut.
  3. LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3 – ничто. Это должно быть в подстановке команд , но даже тогда это не будет работать из-за двойного интервала. Должно быть: LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")
  4. Переменные, установленные внутри вашего скрипта, не будут доступны вне его, поэтому выполнение команды echo $LATESTBIULD в командной строке после выполнения скрипта не будет и не должно работать.

Вот рабочая версия вашего скрипта:

 #!/bin/bash LASTBUILD='174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' echo "this is the LASTBUILD ============== $LASTBUILD" LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD") echo "this is the LATESTBUILD ############### $LATESTBUILD" 
 awk '{ print $3 }' <<< $LASTBUILD 

Разделитель полей по умолчанию в awk в пробелах, поэтому выведите 3-е поле с пробелами.

Вы можете сделать это (осторожно) с оболочкой:

 LASTBUILD=' 174254491 2018-08-08T11:04:40Z gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)' set -f # disable filename generation (globbing) set -- $LASTBUILD # specifically un-quoted, to allow splitting LATESTBUILD=$3 

Как насчет

 read _ _ LATESTBUILD _ <<< $LASTBUILD