0

私はこのbashスクリプトを見つけました(これは機能します)。このスクリプトは重要な役割を果たします。スクリプトの全体的なコード品質は良好です。次の構造に何か意味があるのだろうか?

if [ "${G_FILE}" != "" ] && [ -f "${G_FILE}" ] && [ -r "${G_FILE}" ]; then
....

マニュアルには次のように書かれています。

[ -f FILE ] True if FILE exists and is a regular file.
[ -r FILE ] True if FILE exists and is readable.
[ STRING1 != STRING2 ]  True if the strings are not equal.

私の考え:

  1. [ -n "${G_FILE}" ]または[ "${G_FILE}" ]の代わりになり[ "${G_FILE}" != "" ]ます。
  2. 同じことをするだけ[ -r "${G_FILE}" ]です。

私は正しいですか?

4

2 に答える 2

3

まず、厳密なPOSIX準拠が必要な場合に[のみ、最初から意味があります。オプション引数が適切に引用されている場合、テストは空の場合は常にfalseである必要があるため、最初のテストは役に立ちません。たとえば、名前付きパイプ、ソケットなどに当てはまります。通常のファイルのみに制限されます。[[-f-r-r-f

通常、ファイルが実際に読み取り可能であることを確認する必要はありません。このチェックは、ファイルを使用しているものがほとんどの場合成功したかどうかのテストにバンドルすることができます。失敗したリダイレクトはfalseであり、最初に読み取り可能なファイルをテストするよりも、失敗したときに適切なステータスを返すように関数を作成することをお勧めします。

于 2012-12-25T09:01:31.287 に答える
2

特に通常のファイルである必要が-rない限り、使用するだけで十分です。

于 2012-12-25T08:58:14.777 に答える