백틱(`)을 사용하여 호출하면 로컬로 생성된 별칭이 사용되지 않습니다.

백틱(`)을 사용하여 호출하면 로컬로 생성된 별칭이 사용되지 않습니다.

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을 한 번 재정의하고 싶지만 작동하지 않는 것 같습니다.

여기서 무엇이 잘못되었을 수 있습니까? 별칭을 작동시키려면 어떻게 해야 합니까?

답변1

다음 줄을 잊어버렸습니다.

shopt -s expand_aliases

예를 들어

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

답변2

문제는 실제 쉘에 대한 별칭을 생성했다는 것입니다. 백틱( 또는 )을 사용하면 $(...)실행하는 하위 쉘에서 별칭이 무시됩니다(내가 아는 한 별칭은 내보낼 수 없으므로 하위 쉘에서 재정의해야 합니다).

귀하의 경우 아마도 가장 좋은 방법은 명령이 포함된 변수를 설정하는 것입니다. 설명하다:

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

관련 정보