В этом вопросе основная проблема не в том, что grep
интерпретирует $
как регулярное выражение. Речь идет о оболочке, заменяющей $someVar
значением переменной окружения someVar
, вероятно, пустой строкой.
Итак, в первом примере это похоже на вызов grep
без каких-либо аргументов, и именно поэтому он дает usage
вывод. Во втором примере должны возвращаться не все строки, содержащие someVar
, а все строки, поскольку пустая строка находится во всех строках.
Чтобы указать оболочке не заменять, вы должны использовать '$someVar'
или \$someVar
. Затем вам придется разобраться с интерпретацией grep символа $
, следовательно, опция grep -F
приведена во многих других ответах.
Таким образом, один правильный ответ будет:
grep -ir "Something Here" * | grep '$someVar'