bash:读取行并保留空格

Kha*_*eal 4 bash space

我试图从包含多行的文件中读取行.我想识别只包含空格的行.根据定义,空行为空,不包含任何内容(包括空格).我想检测似乎是空的行,但它们不是(仅包含空格的行)

    while read line; do
        if [[ `echo "$line" | wc -w` == 0 && `echo "$line" | wc -c` > 1 ]];
        then
             echo "Fake empty line detected"
        fi
    done < "$1"
Run Code Online (Sandbox Code Playgroud)

但是因为read忽略了字符串开头和结尾的空格,我的代码无效.

一个文件的例子

hi
 hi
(empty line, no spaces or any other char)
hi
  (two spaces)
hey
Run Code Online (Sandbox Code Playgroud)

请帮我修复代码

che*_*ner 7

通过清除IFS(内部字段分隔符)的值禁用分词:

while IFS= read -r line; do
....
done < "$1"
Run Code Online (Sandbox Code Playgroud)

-r不是绝对必要的,但这是一种很好的做法.


另外,一种更简单的方法来检查line(我假设你正在寻找一条除了空格之外的一行):

if [[ $line =~ ^$ ]]; then
    echo "Fake empty line detected"
fi
Run Code Online (Sandbox Code Playgroud)