1

cpで*を使用すると、正規表現と同じルールに従うと思います。したがって"cp temp/* test/"、すべてをコピーする必要がありますが、一時フォルダが空の場合、ファイルまたはディレクトリが見つからないという例外がスローされます。これは、*が「nothing」と一致しないことを示します。

次に、tempの下にファイルtest.txtを作成し、次のようにします。

cp temp/test.txt* test/

これは機能します。これは、*が実際に「何もない」と一致することを示します。

私はその行動について混乱します。誰かが少し説明できますか?

ありがとう

4

3 に答える 3

4

何が起こっているのかというと、*拡張はシェルによって行われる(bashおそらく)。パターンtemp/testfile.txt*は一致しましたtemp/testfile.txt*0個以上の文字に一致します)ので、bashはそれをに渡しましたcp

ただし、bashデフォルトでは、ワイルドカードが何にも一致しない場合にそのままアプリに渡すように設定されています(nullglobこの直感的でない動作をオフにするために呼び出されるオプションがあります)。それで、それはtemp/*文字通りcpに渡され、それは存在しないと不平を言いました。

于 2012-09-21T00:14:18.570 に答える
1

シェルが拡張を行うため、cp特定されていません。

一致しないものが見つかった場合、置換はありません。元の文字列(temp/*)が予約され、アプリケーションに渡されます。もちろんcp、その名前のファイルは見つかりません。

# echo nosuchfile*
nosuchfile*

「何もない」ためのいくつかの説明:

temp/*ディレクトリ内のエントリ(ファイル/ディレクトリ/ ...)を意味しますtempが、ファイルがなかったため、失敗しました。

temp/test.txt*test.txtディレクトリで始まるエントリを意味しますtemp

于 2012-09-21T00:12:39.513 に答える
0

ワイルドカードglobbingは正規表現と同じではなく、独自のルールを備えています。

シェルが異なればルールも異なります...概要を把握するためにWikipdiaを確認する必要があります。

于 2012-09-21T00:14:46.780 に答える