emacs lispのshell-command-to-string()

shell-command-to-stringっていう関数は、渡された文字列をコマンドとしてログインシェルに渡すっぽい。

なのでtcshをログインシェルにしていて、下記のようなものを評価すると

(shell-command-to-string
 "perl -e 'print join(q{ }, grep( !/^\.$/, @INC));'"
 )
"/: Event not found.
"

エラーがでます。これは「!」がtcshでは特別な意味を持ってるから。
ログインシェルをbashzshに変えてやってみたら↑のは問題なく実行できました。