誰かがこれがどのように機能するかを説明できますか?組み込みのechoコマンドがディレクトリリストとどのようにやり取りするのかわかりません。
bash-5.2$ ls
2 file000 file003 file006 file009 file012 file015 file018 file021 file024 file027 h
5 file001 file004 file007 file010 file013 file016 file019 file022 file025 file028 ola
8 file002 file005 file008 file011 file014 file017 file020 file023 file026 file029 q
bash-5.2$ echo [0-9a-z]
2 5 8 h q
ありがとうございます。
答え1
これは、受け取った引数、スペースの区切り、および改行の終わり(いくつかの潜在的なオプション処理およびバックスラッシュエスケープ処理の後)を印刷することとは関係ありませんecho
。echo
ここで見えるのはシェルの効果です。ワイルドカード、また〜として知られるファイル名の生成また〜として知られていますパス名拡張*
したがって、リストのコンテキストで、および?
(除くfish
)、[...]
(シェルに応じてより多くの場合も可能です)を含む引用符で囲まれていないワイルドカードパターン演算子が含まれている場合、一部の単語が拡張されます。シェルを通してディレクトリツリーで一致するファイルのリストに移動します。
コマンドに関係なくecho
、、、rm
...firefox
以下で見たことがあります。
rm -- *.txt
そこから*
行動が引き起こされます。
存在する:
echo [0-9a-z]
それが[...]
それを引き起こしたものです。パターンは、または1との間の1つの文字と一致するため、[0-9a-z]
ワイルドカードでは、この単語はパターンと一致する現在の作業ディレクトリ内のすべての単一文字ファイル名に展開されます。0
9
a
z
[0-9a-z]
rm -- [0-9a-z]
削除、vi -- [0-9a-z]
編集などを行います。
重要なヒント:コマンド、、、、rm
...の1つはecho
、vi
パターンではなく拡張結果(別々の引数として)のみを表示します。特に、その拡張子の最初の²ファイル名が-
3で始まる場合は、潜在的に災害の影響を及ぼすオプションと見なすことができるので、同様に⁴をcmd -- $files
忘れないことが重要です--
。
2
¹これには、、、、5
など8
の文字が含まれますが、、などの頻繁に(しばしば見落とされる)h
文字q
も含まれます²
。DŽ