Echo multiline var to Grep

时间:2017-12-10 23:22:33

标签: bash variables grep

如何管道多行变量以grep并保留换行符?

预期结果:

$ git status --porcelain --branch
## test-branch
M  image.go
 M item.go
?? addme.go
?? testdata/
$ git status --porcelain --branch | grep -c '^??'
2

" 2"是答案。

但是在脚本中(或只是输入命令),我无法从下面解析此$x

$ x="$(git status --porcelain --branch)"
$ y="$(echo $x | grep -c '^??')"
$ echo "$y"
0

我怀疑这与我在$(echo $x ...变量作业中回应y的方式有关。

编辑:我只执行x="$(git status --porcelain --branch)"一次,并使用多个grep命令解析它几十次,用于各种输出,值,计数,状态,分支,后台,前方和其他值。因此,我需要将git status ...的输出分配给变量,并多次解析它。

1 个答案:

答案 0 :(得分:5)

如果您不引用$x,则会进行分词,echo会打印一个长行。您只需使用"$x"

x=$(git status --porcelain --branch)
y=$(echo "$x" | grep -c '^??')
echo "$y"

此外,您不必使用额外的echo

y=$(grep -c '^??' <<< "$x")

我建议使用shellcheck。在这种情况下,这确实很有帮助。