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


19

最後の4つのエコーステートメントに対して1 4 5 6が表示される理由を説明してください。私は偶然これにぶつかったのですが、今ではこの動作がなぜ起こるのか興味があります。

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

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

これらのechoステートメントは常に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質問を見つけることはできませんが、ここに着く可能性が高くなります。

16
:あなたは、名前のあなたの現在のディレクトリ内のファイル4、持っている1 4 56
ジェフ・シャラー

5
Lol、metasmoke.erwaysoftware.com / post / 58973のボットは、「タイトルに電話番号が含まれている」ため、この投稿にスパムのフラ​​グを付けています。
カルロウッド

2
@ CarloWood、10桁の連続番号は、米国の電話番号と市外局番に一致します。通常のフォーマットを使用して作成された場合、987-654-3210になります。
マーク

1
をオンにしたnullglob場合、2番目の例(echo [237890])は実際には何も印刷しないことに注意してください。
カイルストランド

3
可能性のある重複した[0-9]とRM / LSの作業
muru

回答:


33

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

echoステートメントのパラメーターを引用して、シェルがそれをパターン一致要求として認識しないようにする必要があります。

$ echo '[9876543210]'
[9876543210]

(または、1、4、5、および6という名前のファイルを削除しますが、これは動作を示すための回避策であり、修正ではありません)。


4
おそらく、言及するよりも3つのパラメーターを持つecho [ 987 ]呼び出しechoと言う方が良いでしょうtestか?
dhag

2
それは確かにだろう!過剰回答:(
ジェフシャラー

1
*最初にさまざまなテストのエコーステートメントを試しているときに遭遇したため、最初の回答バージョンも気に入っています。
MikeD

1
元の答えは真実ではありません。彼は書いた:echo [9876543210]。[(したがってテスト)の呼び出しは行われません。
knezi

重要な点は、角括弧の間にスペースがあるかどうかと、その中にあるものによって、引数のecho解釈が異なるbashことです。[123][ 123 ]
-jskroch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.