gpt4 book ai didi

Perl 的文件测试运算符 -f 对符号链接(symbolic link)返回 true

转载 作者:行者123 更新时间:2023-12-03 13:59:32 26 4
gpt4 key购买 nike

我曾经认为 -f测试文件以查看它是否是常规文件,而不是其他文件。但是 Perl 的行为似乎有所不同。我查了perldoc entry ,它说:

-f  File is a plain file.

假设我有一个目录,其中有一个名为 file1 的文件。 , 和 5 个符号链接(symbolic link) 1 2 3 4 5 , 每个都指向 file1 ,像这样:
-rw-r--r-- file1
lrwxrwxrwx 1 -> file1
lrwxrwxrwx 2 -> file1
lrwxrwxrwx 3 -> file1
lrwxrwxrwx 4 -> file1
lrwxrwxrwx 5 -> file1
drwxr-xr-x ../
drwxr-xr-x ./

如果我使用 -type f 在这个目录上运行 find过滤器,它按预期给出输出:
%  find . -type f
./file1

但是当我使用 -f 运算符运行 perl 脚本时,它会给出以下输出:
%  ls | perl -e 'while(<>) { chomp; print "$_\n" if -f $_ }'
1
2
3
4
5
file1

当我添加 -l 的测试时同样,它按预期工作:
%  ls | perl -e 'while(<>) { chomp; print "$_\n" if -f $_ and not -l $_}'
file1

符号链接(symbolic link)也被视为普通文件吗?如果是这样,为什么?我对文件测试的使用不正确吗?

最佳答案

当你测试一个符号链接(symbolic link)时,除非你使用 -l符号链接(symbolic link)测试。

这与 stat 类似。和 lstat行为相似的 Linux 系统调用。也就是说,如果您 stat符号链接(symbolic link),您将获得符号链接(symbolic link)目标的结果,而如果您 lstat符号链接(symbolic link),您将获得符号链接(symbolic link)本身的结果。这种行为是有意的,因此天真的程序不必关心符号链接(symbolic link),符号链接(symbolic link)将按预期工作。

你会发现如果你的符号链接(symbolic link)指向一个目录,-f测试为假,-d测试是真的。

关于Perl 的文件测试运算符 -f 对符号链接(symbolic link)返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com