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

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

最後の4つのechoステートメントが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問題を見つけるのは簡単ではありませんが、ここに到達する可能性が高くなります。

答え1

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

シェルがこれをパターンマッチング要求として扱わないようにするには、echoステートメントのパラメータを引用する必要があります。

$ echo '[9876543210]'
[9876543210]

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

関連情報