Шаблон grep
выглядит неправильно. Эмпирическое правило командной строки заключается в том, что все, что находится внутри одинарных кавычек, воспринимается буквально, тогда как, если оно не заключено в кавычки или внутри двойных кавычек, оболочка расширяет такую строку в соответствии с ее правилами (подстановка, разделение, расширение параметров и т. Д.). В вашем случае команда
grep -E '*"$*"*' ~/.dotfiles/zsh/aliases.zsh
означает передачу grep
string * "$ *" *
буквально, так что grep интерпретирует этот шаблон как звездочку, за которой следует двойная кавычка, за которой следует Долярный знак повторяется ноль или более раз ( *
), за которым следует двойная кавычка, повторяющаяся ноль или более раз ( *
). Это не то, чего вы ожидаете.
Вы хотите рассматривать $ *
как переменную (в данном случае в двойных кавычках), поэтому закройте строку в одинарных кавычках перед ней и откройте после нее:
grep -E '*'"$*"'*' ~/.dotfiles/zsh/aliases.zsh
Но я не вижу причины для этих звезд (вы же не хотите искать звезды, не так ли?), мне кажется, что вы можете просто упростить это до
grep -E "$*" ~/.dotfiles/zsh/aliases.zsh