bashスクリプトのif文で-fはどういう意味ですか?

bashスクリプトのif文で-fはどういう意味ですか?

このコードを理解してください。

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

-fが正確に何を意味するのかわかりません。

答え1

つまり、コードは、ファイルが存在する場合はそのファイルをソーシングし、/etc/bashrcコマンド(演算子/引数)を介して存在するかどうかを確認します。[-f

if...then...else...fiシェルスクリプトのステートメントは、コマンドの終了状態を評価します(成功時0)。したがって、次のようにすることが正しいです。

if ping -c 4 google.com; then
    echo "We have a connection!"
fi

あなたの場合、コマンドはコマンドとも呼ばれ[ますtest。したがって、これを行うことは完全に有効です。

if test -f /etc/bashrc; then
    . /etc/bashrc
fi

-fフラグは、指定されたパスが存在し、通常のファイルであるかどうかを確認します。/etc/bashrcディレクトリが実際に存在しないか欠落している場合、テストは失敗を示すためにゼロ以外の終了ステータスを返す必要があります。

このコマンドは、もともとシェル組み込みコマンドの一部ではなかった別のコマンドでした。最近では、Bourneなどのほとんどのシェルにこの機能が組み込まれており、シェルはそれを使用します。

ところで、/etc/bashrc管理者やコードスニペットの元の作者が不要な追加ファイルを使用しているようです。存在します/etc/bash.bashrc。これはbashのためのシステム全体のrcファイルとして意図されているので、人々はそれを使用したいと思います。

また見なさい:

答え2

これを確認する関連マニュアルページは、シェル自体のマニュアルページです。シェルはbashに組み込まれた機能を提供するbashからです。-f

私のシステム(CentOS 7)では、素晴らしいマニュアルページがこれをカバーしています。他のディストリビューションではgrep同じ結果が得られない場合があります。それでも実行しman bashてから「-f」を検索すると、必要な結果が得られます。

$ man bash | grep -A1 '\-f file$'
       -f file
              True if file exists and is a regular file.
$

関連情報