为何输入字符串为空时while read循环仍执行?如何修正该Bash脚本?
修正Bash脚本避免空输入时执行循环体
你的脚本里,当grep没匹配到内容时,$LINES是空字符串,但<<< "$LINES"会向while read传递一个空行。read命令读取空行时会返回成功状态(因为它确实读取到了一行,只是内容为空),所以循环体还是会执行一次,导致打印'find line'。
下面是两种可行的修正方案:
方案一:直接用管道传递grep输出(推荐)
改成管道形式后,如果grep没有输出,管道就没有数据,while循环根本不会启动:
#!/bin/bash grep matchnothing file.txt | while read it; do echo 'find line' echo "$it" done
方案二:先判断变量是否非空
先检查$LINES是否有内容,只有非空时才进入循环:
#!/bin/bash LINES=$(grep matchnothing file.txt) if [ -n "$LINES" ]; then while read it; do echo 'find line' echo "$it" done <<< "$LINES" fi
注:建议用echo "$it"代替echo $it,这样可以保留行内的空格和特殊字符,避免被Shell拆分。
内容的提问来源于stack exchange,提问作者link89
相关产品推荐
相关产品推荐

