web-dev-qa-db-ja.com

echo [9876543210]表示1 4 5 6 ...なぜですか?

最後の4つのエコーステートメントに1 4 5 6が表示される理由を説明してください。私はこれを偶然一度ヒットしましたが、なぜこの動作が発生するのかについて知りたいです。

これらのステートメントは期待どおりに機能します(私にとって)。

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

これらのエコーステートメントは常に1 4 5 6を表示します。これらの数値について何か特別なものはありますか?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6

ありがとう!

  • 可能性のある重複は関連していて有用ですが、重複ではありません。重複の可能性は、rmコマンドの観点からです。この質問は、echoコマンドの知覚された「奇妙な動作」の観点からのものです。両方の根本的な答えはグロビングです。 echoコマンドを使用して問題を検索する人は、rmの質問を簡単に見つけることはできませんが、ここにたどり着く可能性が高くなります。
19
MikeD

左角かっこ[は、シェルの特殊文字です。 「大括弧内の任意の文字に一致する」というパターンマッチングアルゴリズムが開きます。現在のディレクトリに1、4、5、6という名前の4つのファイルがあるため、角かっこ内の文字にこれらの数字のいずれかが含まれている場合、シェルはパターン一致をそれらのファイル名に置き換えます。代わりにecho [ 9876543210 ]を使用する場合、[9876543210、および]の3つのパラメーターを使用してechoを呼び出します。

シェルがパターンマッチングリクエストとして認識しないようにするには、echoステートメントのパラメーターを引用符で囲む必要があります。

$ echo '[9876543210]'
[9876543210]

(または、1、4、5、6という名前のファイルを削除します。ただし、これは修正ではなく、動作を示すための回避策です)。

33
Jeff Schaller