「*.txt」と*.txtの違いは何ですか?

「*.txt」と*.txtの違いは何ですか?

ここでgitチュートリアルを完了しています。 https://try.github.io/levels/1/challenges/7

*.txtの周りに一重引用符を入れる必要があると言われています。以前はLinuxを使ってこんな姿を見たことがないのに変だと思いました。また、htmlとphpを使用するときに、文字列が特殊文字を使用する代わりに文字通り解釈されるように単一引用符が使用されることを見たことがあります。

答え1

これは、上記の他の構文とシェルでも同じです。一重引用符で囲まれた文字列は、「文字列リテラル」(つまり)として扱われます。

git add '*.txt'との違いは、git add *.txtファイル名に対してパターンマッチングを行う人が誰であるかです。

の場合、git add '*.txt'パターンgitマッチングが行われています。シェルは文字列リテラルを拡張しないため、'*.txt'単一のgit add引数で呼び出され、使用可能なファイル名と一致します*.txtgitリポジトリ全体(なぜなら… git)。

その場合、git add *.txtシェルはファイル名のマッチングを実行し、一致するファイル名のリストを渡します。現在のディレクトリから到着するgit add。指定されたパターンと一致する名前がない場合、シェルは(通常1git add拡張されていないパターンを渡します。この場合、結果は参照モードと同じです。

1 一般に、failglobたとえばシェルオプションを参照してください。bashこの回答に関するコメントもご覧ください。


git addファイル名を把握するとき模様、これは現在のディレクトリに一致するファイルを追加するだけでなく、リポジトリ全体のすべての一致ファイル(つまり、すべてのサブディレクトリを含む)ので、右下のテキストに次のような内容が表示されます。

ワイルドカード:

シェルがワイルドカードを妨げる前に、Gitがワイルドカードを受け入れるように引用符が必要です。引用符がない場合、シェルは現在のディレクトリでのみワイルドカード検索を実行します。 Gitはワイルドカードの代わりにシェルで見つかったファイルのリストを受け取り、octofamilyディレクトリにファイルを追加することはできません。

答え2

一重引用符はシェルのワイルドカードと変数の拡張を防ぎますが、二重引用符はワイルドカードのみを防ぎ、変数の拡張は防ぎます。

*.txtすべてのファイルはシェルを介して拡張およびリストされます.txt。しかし、引用は'*.txt'それを妨げます。以下の例をご覧ください。

echo *.txt
a.txt b.txt c.txt

echo '*.txt'
*.txt

関連情報