当我在空文件上使用其中一个比较运算符/函数时,Bash返回该文件不为空。必须有换行符或其他内容,但是当它们不应该通过所有这些测试时。
那么有另一种方法来测试文件是否真的有一个字符?我已经尝试了[ -s file.txt ]
,[ -n file.txt]
及其所有兄弟,但他们都回复说file.txt不为空。
我尝试过cat
并将其分配给变量,但由于某种原因,该变量被读取为非空。
任何其他方式来查看文件是否真的为空?
编辑
所以这就是我所做的。我清除了文件(ctrl + a并删除)。确保当我尝试移动光标时光标不会移动。然后我做了if [ -n filename ] ; then echo "not empty"; fi;
这会返回not empty
答案 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