bash 脚本中的egrep 不起作用

bash 脚本中的egrep 不起作用

我有这组命令:

s3ls="aws s3 ls $ssyss3/ --recursive --human-readable --summarize"
egrepCommand="egrep '$currentDate|Total'"
totalSize=$(echo $s3ls|$egrepCommand| awk -F 'Total Size:' '{print $2}'|sed '/^$/d')
echo $totalSize

但我收到此错误:

egrep '2019-05-11|Total': command not found

我缺少什么?

答案1

正如罐头上所说。您创建一个命令名称egrep '2019-05-11|Total',然后尝试调用它。这不是egrep后跟参数,而是完整的命令名称。你想要的更有可能是:

totalSize=$(echo $s3ls| egrep "$currentDate|Total" | awk -F 'Total Size:' '{print $2}'|sed '/^$/d')

如果需要,您可以使用变量来保存参数:

egrepParm="$currentDate|Total" 
totalSize=$(echo $s3ls| egrep "$egrepParm" | awk -F 'Total Size:' '{print $2}'|sed '/^$/d')

有人会说在脚本中最好使用grep -E而不是egrep

PS:别名命令可以在命令提示符/终端中工作,但不能在脚本中工作,因此在终端中尝试该命令并不能证明它可以在脚本中工作。在 bash 中,用于type {commandname}检查名称是真实命令还是别名。egrep在某些 Unix 版本中可以作为别名实现,在我的 Ubuntu 中它是一个普通命令。

相关内容