私は、このコマンドのラッパーとして小さなスクリプトを作成しようとしている:なぜbashスクリプトはアスタリスク付きの文字列に一重引用符を追加するのですか?
$ egrep target /usr/lusers/me/test/*test.txt
/usr/lusers/me/test/1test.txt:target
ディレクトリは、私が検索したいいくつかのテキストが含まれているそのうちの一つ1test.txt
と2test.txt
と呼ばれるファイルを、持っていること。ここで
は私の全体のスクリプトで、mygrep.sh
と呼ばれる:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
ここでは出力です:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
++ egrep targ '/usr/lusers/me/test/*test.txt'
egrep: /usr/lusers/me/test/*test.txt: No such file or directory
注set -x
出力のファイルパスの周り'
sが、コマンドが失敗していること。唯一の違いは、文字ファイル名対アスタリスクであることを
set -v
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
注:
は今、スクリプトのこの変化を比較します。
出力:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
++ egrep target /usr/lusers/me/test/1test.txt
target
拡張後の単一引用符、およびコマンドの作品。
なぜ、アスタリスクがあるときに一重引用符が追加され、その場合にコマンドが失敗するのはなぜですか?
egrepに滅菌してそこに展開させる。私はそれが問題ではないと思いますが、それは可能ですか? – P1h3r1e3d13
@ P1h3r1e3d13グローブ(つまり、式に基づいて一致するファイル名を生成する)はシェルの機能であり、 'egrep'ではありません。アスタリスクが 'egrep'にすると、そのユーティリティのリテラルアスタリスクになります。 – Fred
Gotcha、ありがとう。 – P1h3r1e3d13