Bashで二重引用符を使用するのは混乱しています。

Bashで二重引用符を使用するのは混乱しています。

最近、私のニーズに合わせて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として使用できます*。どのようなアクションをとるかは、参照によって異なります。結果はしばしば異なり、時には間違っています。シェルを拡張するかどうかを知る必要があります*

おすすめ記事