Хотя на этот вопрос уже дан ответ, но, поскольку вы новичок во всем этом, вот как его отладить:
- получить pid текущей оболочки (используя ps
).
PID TTY TIME CMD
1611 pts/0 00:00:00 su
1619 pts/0 00:00:00 bash
1763 pts/0 00:00:00 ps
- из какой-то другой оболочки подключите strace
(трассировщик системных вызовов) к необходимому pid (здесь 1619):
strace -f -o <output_file> -p 1619
- Запустите обе команды, которые вы пробовали
- откройте выходной файл и найдите вызовы семейства exec
для требуемого процесса, здесь: grep
Вывод на моей машине выглядит примерно так:
1723 execve("/bin/grep", ["grep", "--color=auto", "p{2}", "foo"], [/* 19 vars */]) = 0
1725 execve("/bin/grep", ["grep", "--color=auto", "p\\{2\\}", "foo"], [/* 19 vars */]) = 0
Теперь вы видите разницу в том, как grep
был выполнен в обоих случаях, и можете сами определить проблему. :)
все же загадку -e флага еще предстоит решить ....