-f 在 bash 脚本的 if 语句中是什么意思?

Eri*_*ins 7 linux shell-script

试图理解这段代码:

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi
Run Code Online (Sandbox Code Playgroud)

我不确定 -f 的确切含义。

Ser*_*nyy 15

简而言之,/etc/bashrc如果代码段存在,则将其作为源文件,并通过作为运算符/参数的[命令来验证其存在性-f

if...then...else...fishell 脚本中的语句评估命令的退出状态 - 成功时为 0。所以做这样的事情是正确的:

if ping -c 4 google.com; then
    echo "We have a connection!"
fi
Run Code Online (Sandbox Code Playgroud)

在您的情况下,该命令[也称为test命令。所以这样做是完全有效的

if test -f /etc/bashrc; then
    . /etc/bashrc
fi
Run Code Online (Sandbox Code Playgroud)

-f 标志验证两件事:提供的路径存在并且是一个常规文件。如果/etc/bashrc实际上是目录或丢失,则测试应返回非零退出状态以表示失败

该命令原本是一个单独的命令,不属于 shell 的内置命令。现在,大多数类似 Bourne 的 shell 都内置了它,这就是 shell 将使用的。

附带说明一下,/etc/bashrc您的管理员或代码片段的原始作者正在使用的似乎是不必要的额外文件。存在/etc/bash.bashrc,它旨在作为系统范围的 bash rc 文件,因此人们希望使用它。

也可以看看:


ste*_*eve 10

检查此问题的相关手册页是 shell 本身的手册页bash,因为-f是 shell 提供的功能,它是内置的 bash。

在我的系统 (CentOS 7) 上,精美的手册页涵盖了它。该grep可能不会给其他发行版相同的结果。尽管如此,如果您运行man bash然后搜索“-f”,它应该会给出您需要的结果。

$ man bash | grep -A1 '\-f file$'
       -f file
              True if file exists and is a regular file.
$
Run Code Online (Sandbox Code Playgroud)

  • -1 这个答案非常具有误导性,紧接着问题的误导性标题。`-f` 与 `if` 无关;它是 `[` 命令的一个选项,恰好在这里使用 `if` 语句调用。另外,碰巧“[”(与“if”一起)内置于“bash”中。 (2认同)