如何在Shell脚本中比较变量是否包含换行符

4

我有一个脚本,在其中有一行代码将第三行获取的内容放入变量中,如下所示:

variable=`sed -n '3 p' /home/nmsadm/abc.txt`

所以variable保存着abc.txt中第三行的值。在我的情况下,它将是一行单词或空白行。

如何在shell脚本中比较变量,以知道它是否为空/空白行?echo $variable给我返回了一行空白行。

我需要怎样的比较才能确定它是空白行呢?类似于这样:

if [ "$variable" = "comparison" ]; then
3个回答

8

空或未定义:

if [ -z "${variable-}" ]

单个换行符:

if [ "${variable-}" = $'\n' ]

未定义:

if [ "${variable+defined}" != defined ]

注意,最后一个命令并不是相反的命令。
if [ "${variable-undefined}" = undefined ]

为了理解原因,先运行variable=undefined"${variable+defined}" 只有两个可能的值:空字符串或 defined

3
你只需要检查是否为空,因为命令替换(反引号)会删除任何尾随的换行符(参见http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution)。 - glenn jackman

3
read str
if [ ${#str} -eq 0 ]       #this can been used to decide whether str is empty or not 
   then
        echo "empty"
else
    echo "not empty"
fi

1
下面的命令将变量的长度存储在var_length中。 var_length=$(echo ${#variable}) 如果$var_length大于或等于1,则$variable是一个字符串。

或者只需使用 var_length=${#variable} - l0b0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接