локально созданный псевдоним не используется, если вызывается с использованием обратных ссылок (`)

Я столкнулся с этой проблемой, пытаясь создать скрипт для grep для нескольких файлов для 10 разных слов.

Сценарий, который я создал, (уменьшен)

#!bin/bash alias grep='grep -n' out=`grep word $1` 

Вывод

 some text word some other text word more text 

Grep работает, но псевдоним не рассматривается. Он просто выводит совпадающие строки, а не номера строк ( -n для номеров строк)

и теперь, если я запустил ниже, он отлично работает

 #!bin/bash out=`grep -n word $1` 

Вывод и ожидаемый вывод из вышеприведенного скрипта:

 233: some text word 532: some other text word more text 

У меня есть инструкция grep во многих местах скрипта, и я не хочу идти и редактировать каждую строку. Я пытаюсь переопределить grep один раз, наложив его, но он, похоже, не работает.

Что может быть здесь? Как я могу заставить псевдоним работать?

Вы забыли эту строку:

 shopt -s expand_aliases 

например

 #!/bin/bash shopt -s expand_aliases alias grep='grep -n' out=$(grep word "$1") echo "$out" 

Проблема в том, что вы создали псевдоним для вашей реальной оболочки. Когда вы используете backticks (или $(...) ), вы запускаете под-оболочку, которая игнорирует ваш псевдоним (псевдонимы AFAIK не могут быть экспортированы, поэтому вам придется переопределить их в под-оболочке).

В вашем случае, возможно, лучшим подходом было бы установить переменную, содержащую команду. Сказать:

 MY_GREP="grep -n" out=`${MY_GREP} word $1`