最近、私のニーズに合わせてbashスクリプトを書くことを忙しくしました。ところでコーディングをして二重引用符の使用が時々矛盾することを発見しました。たとえば、正規表現に一致するいくつかのファイルを見つけようとします。たとえば、ls "*.log"
習慣的に*.log
二重引用符で囲まれていますが、エラーが発生しますcannot access '*.txt': No such file or directory
。
その後、チュートリアルで理由を見つけました。二重引用符の中に二重引用符を入れることは、ワイルドカードで動作したい*
場合には*
役に立ちません。したがって、ls *.log
正しい使い方です。
ただし、grep
正規表現でコマンドを使用すると、3つ(、、二重引用""
符''
)は正規表現の元の意味を変更しませんgrep "^s.txt"
。たとえば、この時点で二重引用符は正規表現を有効にします。
コマンド間にいくつかのデザイン競合がありますか?一般的なコマンドの正しい引用符の使い方をすばやく学ぶためのヒントをいくつか教えてください。
答え1
ls *.log
シェルなら拡張ワイルドカード始める前にls
。それからls
与えられた結果。ツール*
自体には拡張機能はありません。
grep "^s.txt"
シェルが引用符のみを削除する場合(通常はまだ役に立つことがわかります)シェル引用符で囲まれた文字列を処理する方法)、grep
それを取得し、対応^s.txt
する操作を実行します。引用符がない場合、^s.txt
シェルは何もしないので、結果は同じです。ただし、通常は異なる場合があります(例a*.*txt
:)。
これを比較しなさい:find
およびワイルドカード(およびワイルドカード)。シェルをワイルドカードfind -name
として使用できます*
。どのようなアクションをとるかは、参照によって異なります。結果はしばしば異なり、時には間違っています。シェルを拡張するかどうかを知る必要があります*
。