如何测试shell脚本中的行是否为空?

pla*_*etp 30 bash shell sh

我有这样的shell脚本:

cat file | while read line
do
    # run some commands using $line    
done
Run Code Online (Sandbox Code Playgroud)

现在我需要检查该行是否包含任何非空格字符([\n\t\t]),如果不包含,则跳过它.我怎样才能做到这一点?

Ark*_*kku 62

由于read默认情况下读取空格分隔的字段,因此仅包含空格的行应该导致将空字符串分配给变量,因此您应该能够使用以下内容跳过空行:

[ -z "$line" ] && continue
Run Code Online (Sandbox Code Playgroud)

  • (更确切地说,`read`使用的分隔符由`IFS`变量确定,默认为空格.只是取消设置`IFS`以恢复使用空格.) (5认同)
  • (对于像我这样的新手)。`[ -z "$line" ] && continue` 本身是可执行的。这条优雅的线相当于 `if [ -z "$line" ] ; 然后继续; 菲`。顺便说一句,不要忘记在开头设置`IFS=" \t\n"`,除非你不想跳过'tab'。 (3认同)
  • 更简单:不需要引用行,如果你使用bash的[[syntax:`[[-z $ line]] && continue` (2认同)
  • @pihentagy Umm,字符数相同,方括号`[]`比一些国际键盘上的引号更难打字,而且它变成了特定于bash的.所以也许并不简单,但另类.=) (2认同)

小智 10

试试这个

while read line;
do 

    if [ "$line" != "" ]; then
        # Do something here
    fi

done < $SOURCE_FILE
Run Code Online (Sandbox Code Playgroud)

  • 请添加一些解释,而不仅仅是代码. (5认同)

Ign*_*ams 5

庆典:

if [[ ! $line =~ [^[:space:]] ]] ; then
  continue
fi
Run Code Online (Sandbox Code Playgroud)

并使用done < file而不是cat file | while,除非你知道为什么你使用后者.