rm/lsと[0-9]の組み合わせ

rm/lsと[0-9]の組み合わせ

私はシェルコマンドを学んでいますが、[0-9]、[[:digit:]]などの短いタグを見つけました。概念証明として、rmコマンドを使用してすべてのファイルを削除してみました(それは良い習慣ではありませんが、その仕組みを理解したかったです)。

rm [0-9].txt

ディレクトリには0.txtと9.txtという2つのファイルがあり、0.txtと9.txtファイルを削除します。 [0-9] 式が拡張され、次に 0.txt 1.txt 2 .txt を読み取ると推測されます。投げられる。

誰かが rm や ls と一緒に使うとき、速記コマンドがどのように動作するか教えてください。

ベストアンサー1

これは…ワイルドカード(bashドキュメントへのリンクですが、これはbashに限定されません。)

を実行すると、rm [0-9].txtシェルは[0-9].txtパターンに一致するディレクトリのファイルのリストに展開されます。その後、このリストは引数として渡されますrm(各ファイルは別々の引数として)。
いいえ、シェルはそれを拡張せずに0.txt 1.txt ... 9.txt一致するファイルを探します。

なぜ拡張するglobパターンなしでを実行して引数がrm 5.txtそのまま渡され、rmファイルが存在しないことを確認して文句を言うのですか?

他のことを試してみてください。同じコマンドですが、rm [0-9].txtディレクトリにあります。いいえこのパターンに一致するファイルはありません。苦情は再び表示されますが、rm今回は次のように表示されます。

rm: cannot remove '[0-9].txt': No such file or directory

これは、globパターンがどんなものとも一致しない場合(基本的に)発生します。シェルはそれを拡張せずに変更せずに残します。

このタイプのパターンマッチングに関するPOSIXリファレンス:パターンマッチング表記

おすすめ記事