最後の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のファイルを削除してください。ただし、これは修正ではなく動作を示すための回避策です。)