誰が*を扱う(解釈する)
echo *
エコーは星またはシェルがそれを処理し、ファイル名のリストを返すことを確認します..
どう?
cp temp temp*
誰が*を扱う(解釈する)
echo *
エコーは星またはシェルがそれを処理し、ファイル名のリストを返すことを確認します..
どう?
cp temp temp*
回答:
bash(またはシェルとして使用するもの)は、入力を最初に読み取り、andなどの特殊文字の解釈を開始?
し*
ます。CWDで*
一致するものすべてに展開されます。つまり、アスタリスクが前述の一致に置き換えられます。
ほとんどの場合、これはかなり困難ですが、ときどき混乱を招く場合があります。
以下を考慮してください。ディレクトリには次の内容があります。
その後、mv *
一見奇妙に見える何かを入力するtest3
と、そこにありますが、残りはなくなります。最初は奇妙ですが、bashが実際に何を渡すかを理解すれば意味がありますmv
。アスタリスクのため、bashはmv *
として解釈しmv test test1 test2 test3
、mvがそのリストを取得すると、最後の引数が宛先であると仮定します。宛先は、すべてのファイルが移動された場所です。
あなたがリストしたコマンドに関して:
echo *
貧乏人として機能することができますls
。シェルはアスタリスクをそのディレクトリ内にあるものに展開しますが、既に知っていると思いますが、echo
引数として渡されたbashを文字通りエコーするだけです。cp temp temp*
mv
tempという名前のディレクトリが1つしかない限り、上記で説明したコマンドのように動作します。この場合、ソース名と宛先名は同じです。つまり、何もしません。*
代わりに使用することについて「悪い」ことは何もありませんls
。例えば、for f in *; do
ある以上より信頼性の高いfor f in $(ls)
ファイル名が空白またはグロブ文字が含まれている場合。(ただし、CWDにファイルがない場合は失敗します。そのため、そのケースを確認する必要があります。)
shopt nullglob
が目的です。
既に述べたように、シェルは展開される*
のでecho
、シェルが現在のディレクトリで見つけたものを引数として受け取ります。ただし、展開しても何も起こらない場合、つまり、ディレクトリに非隠しファイルが含まれていない場合は、*
変更されずに呼び出されたコマンドにそのまま渡されることに注意してください(標準オプションがbash
。前者は何も出力せず、後者は出力echo *
するため、貧しい人のように振る舞うことはありません。ls
*
同様に、名前がで始まるファイルが少なくとも1つも存在しない場合、現在のディレクトリにcp /tmp/temp temp*
名前の付いたファイルを作成します。temp*
temp
最後に、*
大文字と小文字を区別せずに渡したい場合は、単一引用符'*'
、二重引用符、"*"
またはバックスラッシュを使用して展開から保護できます\*
。
Bashでは、シェルがそれを処理します。あなたは、あなたもしようことがわかり*
エコーなし
注-いくつかのコメントに基づいて、* ENTERを実行してディレクトリを作成し、touchコマンドを使用していくつかのファイルを作成し、それらのいずれもが少なくともアルファベット順で最初のものが名前でないことを確認することをお勧めしますパス内の任意のスクリプトまたはコマンドの。
$ *
bash: a: command not found
$ echo *
a a.aa a.ab a.b a.htm a.tx
だから、ls *
決まり文句のビットがあります
Windowsでは、*
コマンドによって処理されるためdir *.*
、決まり文句ではありません。
注-いくつかのコメントを見て、*を実行してからENTERを実行するリスクがあります。ディレクトリリストの最初にあるrmというファイルがある場合、それ以降は削除されるため危険です。また、ディレクトリリストの最初のファイルがパス内のスクリプトの名前である場合、これはあまり起こりそうにありませんが、それはそれを実行します。
rm
もちろん、という名前のファイルがある可能性があることに注意してください。
-rf
か?私が試したtouch -rf
し、touch \-rf
それはそれを作成されていません。
-rf
。(rmと呼ばれるファイルと-rfと呼ばれるファイルの危険性と、*を入力して重要なフォルダーで
シェルは、引数がコマンドに渡される前にいくつかの展開を 実行します。
https://www.gnu.org/software/bash/manual/bashref.html#Simple-Command-Expansionも参照してください
bash固有ではありません。http ://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01を参照してください