检查空文件返回非空

时间:2015-06-18 17:26:02

标签: bash shell

当我在空文件上使用其中一个比较运算符/函数时,Bash返回该文件不为空。必须有换行符或其他内容,但是当它们不应该通过所有这些测试时。

那么有另一种方法来测试文件是否真的有一个字符?我已经尝试了[ -s file.txt ][ -n file.txt]及其所有兄弟,但他们都回复说file.txt不为空。

我尝试过cat并将其分配给变量,但由于某种原因,该变量被读取为非空。

任何其他方式来查看文件是否真的为空?

编辑 所以这就是我所做的。我清除了文件(ctrl + a并删除)。确保当我尝试移动光标时光标不会移动。然后我做了if [ -n filename ] ; then echo "not empty"; fi;这会返回not empty

1 个答案:

答案 0 :(得分:1)

非空文件的测试是:

[ -s file.txt ]

因此,空文件的测试是:

[ ! -s file.txt ]

或者您可以在测试命令之外使用Bash的!运算符:

if ! [ -s file.txt ]

请注意,这些操作会将文件视为空白'如果它包含零字节。如果它大于那个,根据定义它不是空的。如果要检查内容并忽略仅包含空格和换行符等的文件,则需要完全不同的测试。

您可以考虑使用[[命令(内置了许多特殊语义的shell)而不是[,尽管在这种情况下,它没有实际区别。 [[命令不像[那样可移植。

请注意,-n选项测试非空字符串(不是非空文件)。

[ -n file.txt ]

将始终通过(因为file.txt不是空字符串)。它与变量一起使用:

[ -n "$variable" ]    # Is $variable non-empty
[ -z "$emptyvar" ]    # Is $emptyvar empty