如何管道多行变量以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 ...
的输出分配给变量,并多次解析它。
答案 0 :(得分:5)
如果您不引用$x
,则会进行分词,echo
会打印一个长行。您只需使用"$x"
:
x=$(git status --porcelain --branch)
y=$(echo "$x" | grep -c '^??')
echo "$y"
此外,您不必使用额外的echo
:
y=$(grep -c '^??' <<< "$x")
我建议使用shellcheck。在这种情况下,这确实很有帮助。