最後の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
の質問を簡単に見つけることはできませんが、ここにたどり着く可能性が高くなります。左角かっこ[
は、シェルの特殊文字です。 「大括弧内の任意の文字に一致する」というパターンマッチングアルゴリズムが開きます。現在のディレクトリに1、4、5、6という名前の4つのファイルがあるため、角かっこ内の文字にこれらの数字のいずれかが含まれている場合、シェルはパターン一致をそれらのファイル名に置き換えます。代わりにecho [ 9876543210 ]
を使用する場合、[
、9876543210
、および]
の3つのパラメーターを使用してechoを呼び出します。
シェルがパターンマッチングリクエストとして認識しないようにするには、echoステートメントのパラメーターを引用符で囲む必要があります。
$ echo '[9876543210]'
[9876543210]
(または、1、4、5、6という名前のファイルを削除します。ただし、これは修正ではなく、動作を示すための回避策です)。