我们被分配了一个与各种文件一起使用的项目。有问题的代码是:
if [[ -f $first_arg ]]; then
open_file $first_arg
elif [[ -d $first_arg ]]; then
search_directory $first_arg
.....
只使用常规文件它可以正常工作,但如果我像这样运行脚本(使用〜/。),它会进入第二个条件:
./script01.sh ~/.config
所以我想知道什么时候bash检查-f和-d,什么被认为是目录或文件,什么不再是。
答案 0 :(得分:1)
~/.config
通常是Joe在评论中建议的目录。
至于发生了什么,bash显然在有问题的文件上调用stat(2)
,返回包含st_mode
字段的相应结构。有关详细信息,请参见inode(7)
:
The stat.st_mode field (for statx(2), the statx.stx_mode field) con‐
tains the file type and mode.
即:
The following mask values are defined for the file type:
...
S_IFREG 0100000 regular file
...
S_IFDIR 0040000 directory
剩下的就是检查设置了哪些位。