이런 스크립트가 있는데,
#/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 ~]#
위의 코드는 작동하지 않습니다.
추신: awk도 사용해 보았으나 성공하지 못했습니다.
LATESTBUILD=$LASTBUILD | awk -F '/' '{print $5}'
답변1
awk '{ print $3 }' <<< $LASTBUILD
awk의 기본 필드 구분 기호는 공백이므로 공백으로 구분된 세 번째 필드가 인쇄됩니다.
답변2
스크립트에 몇 가지 문제가 있습니다.
- 해시 폭발이 유효하지 않습니다. 당신은 그랬고
#/bin/bash -x
그래야 한다#!/bin/bash -x
- LASTBUILD 변수가 이상합니다. 각 열은 이중 공백으로 구분되어
cut
이상한 동작을 일으키며 여기에 개행 문자를 삽입하고 싶지도 않습니다. LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3
아무것도 아님. 이 안에 있어야명령 대체, 하지만 그래도 이중 간격으로 인해 작동하지 않습니다. 그것은해야한다:LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")
- 스크립트 내부에 설정된 변수는 스크립트 외부에서 사용할 수 없으므로
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"
답변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
답변4
어때요?
read _ _ LATESTBUILD _ <<< $LASTBUILD