Не работает липкий бит setgid

Шаблон grep выглядит неправильно. Эмпирическое правило командной строки заключается в том, что все, что находится внутри одинарных кавычек, воспринимается буквально, тогда как, если оно не заключено в кавычки или внутри двойных кавычек, оболочка расширяет такую ​​строку в соответствии с ее правилами (подстановка, разделение, расширение параметров и т. Д.). В вашем случае команда

grep -E '*"$*"*' ~/.dotfiles/zsh/aliases.zsh

означает передачу grep string * "$ *" * буквально, так что grep интерпретирует этот шаблон как звездочку, за которой следует двойная кавычка, за которой следует Долярный знак повторяется ноль или более раз ( * ), за которым следует двойная кавычка, повторяющаяся ноль или более раз ( * ). Это не то, чего вы ожидаете.

Вы хотите рассматривать $ * как переменную (в данном случае в двойных кавычках), поэтому закройте строку в одинарных кавычках перед ней и откройте после нее:

grep -E '*'"$*"'*' ~/.dotfiles/zsh/aliases.zsh

Но я не вижу причины для этих звезд (вы же не хотите искать звезды, не так ли?), мне кажется, что вы можете просто упростить это до

grep -E "$*" ~/.dotfiles/zsh/aliases.zsh
3
11.06.2016, 14:44
0 ответов

Теги

Похожие вопросы