ケースシナリオ:
$ echo "1,2,4" | grep -v [0-9]
[No results, as expected]
しかし、次のように完了したらcron
:
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v [0-9] > /tmp/debug.dump
[...]
$ cat debug.dump
1,2,4
回避策(または回避策があるかどうかわかりません):
$ crontab -l
[...]
* * * * * echo "1,2,4" | grep -v "[0-9]" > /tmp/debug.dump
[...]
$ cat debug.dump
[No results, as expected]
私は問題を解決し、忘れるのではなく、問題を理解したいと思います。
二重引用符がこの問題を解決するのはなぜですか?
注:これはFreeBSD v10.3です。
ベストアンサー1
このcronジョブを実行しているユーザーのホームディレクトリには、0、3、5、6、7、8、または9というファイルがあります。シェルは引用符のない[0-9]
引数をそのファイル名に拡張します(と仮定0
)。0
入力に'がないので、grep -v
「成功」して何も印刷しません。
テスト時に別のディレクトリ(1桁の数字のファイル名を持たないディレクトリ)にあります。二重引用符(または一重引用符)引数は、シェルがglobを拡張するのを防ぎ、grepがそれを範囲として扱うことを可能にします。