Bash:一致しない場合は空の文字列を返さない理由

Bash:一致しない場合は空の文字列を返さない理由

一致するものがない場合、*がそれ自体で返される理由は理解できません。これ回答これが実際に本当だと指摘していますが、私はこの行動の根拠を理解していません。一致しない場合*または他の一般的なパターンが空の文字列を返さないのはなぜですか?

$ls      # Look, no files
$touch a # Add a file
$echo *  # Works as expected
a
$rm a    # Remove the file
$echo *  # Will output a '*'. Why not ''?
*
$*       # Ok, * will fail, but how come the previous output?
-bash: *: command not found
$

ベストアンサー1

どのファイルとも一致しないパターンはエラーと見なされます。これはUNIXの最初のバージョンで見ることができます。

全体的な状況エラーが印刷され、ここに渡されたコマンドは実行されません。

エラーメッセージは次のとおりです。「不一致」

現代のシェルからボン(Unixバージョン7)ls -l *.c、「*.c:対応するファイルまたはディレクトリがありません」というエラーが生成されます。このメッセージがわかりやすいと言いたいです。また、失敗パターンを示します。

*.c拡張子が空の場合、ls -l *.cディレクトリ内のすべてのファイルが表示され、エラーは印刷されません。

failglobbashには元の動作に近いオプションがあります。

おすすめ記事