Вы получаете $
в результате, потому что *
означает совпадение ноль или более от предыдущего шаблона.$0
соответствует, потому что имеет $
, за которым следуют 0 букв.Если вам нужна хотя бы одна буква, используйте +
вместо этого, это означает один или более.
Но если вы хотите иметь возможность сопоставить $FILE12NAME
, вам также необходимо разрешитьцифры после первого символа.Поэтому используйте:
grep -i -o '\$[a-z_][a-z_0-9]*'
Это соответствует $
, за которым следуют буква или подчеркивание, за которыми следуют ноль или более букв, подчеркиваний или цифр.