crontabで引用されたパラメータが異なる動作をするのはなぜですか?

crontabで引用されたパラメータが異なる動作をするのはなぜですか?

ケースシナリオ:

$ 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がそれを範囲として扱うことを可能にします。

おすすめ記事