Bash 并非所有grep输出行都返回
我正在编写一个shell脚本来与本地Docker repo进行交互,并发现我从bash脚本得到的结果与我预期的不同。首先,使用以下命令行:Bash 并非所有grep输出行都返回,bash,shell,docker,Bash,Shell,Docker,我正在编写一个shell脚本来与本地Docker repo进行交互,并发现我从bash脚本得到的结果与我预期的不同。首先,使用以下命令行: des@dev: docker images | grep gateway 我得到: test-gateway 4.27.0-1.5.2-301 b215d109c627 8 days ago 1.977 GB test-gateway dev b215d109c627
des@dev: docker images | grep gateway
我得到:
test-gateway 4.27.0-1.5.2-301 b215d109c627 8 days ago 1.977 GB
test-gateway dev b215d109c627 8 days ago 1.977 GB
test-gateway staging b215d109c627 8 days ago 1.977 GB
test-gateway 4.26.2-1.5.2-298 7376dd26db6e 2 weeks ago 2.117 GB
test-gateway 4.26.2-1.5.2-297 c84e6de5a18e 2 weeks ago 2.117 GB
test-gateway 4.26.0-1.5.2-296 e6a772c0e230 2 weeks ago 2.048 GB
test-gateway 4.24.3-1.5.2-295 d3743f5246f4 3 weeks ago 1.978 GB
test-gateway prod d3743f5246f4 3 weeks ago 1.978 GB
test-gateway 4.24.1-1.5.2-294 99065a070172 5 weeks ago 1.908 GB
test-gateway 4.24.1-1.5.2-293 90639b86573a 5 weeks ago 1.908 GB
test-gateway 4.24.1-1.5.2-292 223f8c3a41cf 5 weeks ago 1.908 GB
test-gateway 4.24.0-1.5.2-291 5646792848cf 6 weeks ago 1.873 GB
test-gateway 4.24.0-1.5.2-290 8a4e92f6a7b9 6 weeks ago 1.847 GB
test-gateway 4.24.0-1.5.2-289 475e72c8691e 6 weeks ago 1.847 GB
test-gateway 4.23.8-1.5.2-288 1c83a9f9ccc4 7 weeks ago 1.812 GB
test-gateway 4.23.8-1.5.2-287 5e77c056c703 7 weeks ago 1.812 GB
test-gateway 4.23.7-1.5.2-286 b9d9f95ec17d 7 weeks ago 1.812 GB
test-gateway 4.23.6-1.5.2-282 f40fe68c0183 8 weeks ago 1.997 GB
运行以下脚本:
#!/bin/bash
docker images | grep gateway | while read line; do
read line
echo "$line"
done;
返回:
test-gateway staging b215d109c627 8 days ago 1.977 GB
test-gateway 4.26.2-1.5.2-298 7376dd26db6e 2 weeks ago 2.117 GB
test-gateway 4.26.0-1.5.2-296 e6a772c0e230 2 weeks ago 2.048 GB
test-gateway prod d3743f5246f4 3 weeks ago 1.978 GB
test-gateway 4.24.1-1.5.2-293 90639b86573a 5 weeks ago 1.908 GB
test-gateway 4.24.0-1.5.2-291 5646792848cf 6 weeks ago 1.873 GB
test-gateway 4.24.0-1.5.2-289 475e72c8691e 6 weeks ago 1.847 GB
test-gateway 4.23.8-1.5.2-287 5e77c056c703 7 weeks ago 1.812 GB
test-gateway 4.23.6-1.5.2-282 f40fe68c0183 8 weeks ago 1.997 GB
为什么bash脚本不返回所有匹配的行
注意:仅查看输出,我发现脚本似乎以某种方式删除了图像大小相同的行,这使得这一点更加奇怪,因为脚本中没有任何限制输出的内容。您有一个额外的
read line
调用,它使您在解析脚本时跳过结果的每一行需要删除的输出
通过使用read
命令和while循环引入简单语法,还可以删除额外的子shell处理层。该语法基本上允许您从命令输出中读取,就像从文件中读取一样
while IFS= read -r line; do
printf '%s\n' "$line"
done< <(docker images | grep gateway)
而IFS=read-r行;做
printf'%s\n'$行
完成<您有一个额外的读取行
调用,它使您在解析输出时跳过结果的每一行,这需要删除
通过使用read
命令和while循环引入简单语法,还可以删除额外的子shell处理层。该语法基本上允许您从命令输出中读取,就像从文件中读取一样
while IFS= read -r line; do
printf '%s\n' "$line"
done< <(docker images | grep gateway)
而IFS=read-r行;做
printf'%s\n'$行
做得好。<聪明地拍了拍额头!谢谢@Inian-我真的错过了@杰布兰查德:这是经常发生的;)狠狠地打额头!谢谢@Inian-我真的错过了@杰布兰查德:这是经常发生的;)与问题无关,只需注意,有时最好在阅读时编写:。。。done<与问题无关,只需注意,有时最好在阅读时编写:。。。完成<