このようなスクリプトがありますが、
#/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
awk '{ print $3 }' <<< $LASTBUILD
awkのデフォルトフィールド区切り文字は空白なので、スペースで区切られた3番目のフィールドが印刷されます。
答え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