私はシェルコマンドを学んでいますが、[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リファレンス:パターンマッチング表記。