我有一个像这样的脚本,
#/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 中的默认字段分隔符位于空格中,因此打印第三个空格分隔字段。
答案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
你可以用 shell(小心地)做到这一点:
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