Bash 함수의 내용을 읽고 보는 방법은 무엇입니까? [복사]

Bash 함수의 내용을 읽고 보는 방법은 무엇입니까? [복사]

명령을 사용하면 언제든지 alias값을 볼 수 있습니다 alias.

wolf@linux:~$ alias al='grep "$1" file.txt'
wolf@linux:~$ alias al
alias al='grep "$1" file.txt'
wolf@linux:~$ 

불행히도 grep별칭에서는 작동하지 않습니다. 무엇이 잘못되었는지 모르겠습니다. 문제점과 해결책을 아시는 분은 알려주세요.

wolf@linux:~$ al
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$ 

wolf@linux:~$ al abc
file.txt:random text
file.txt:abc def jkl
file.txt:random text
file.txt:abc ghi jkl
file.txt:random text
grep: abc: No such file or directory
wolf@linux:~$ 

그래서 함수를 사용하기로 결정했습니다.

wolf@linux:~$ func(){ grep "$1" file.txt; }
wolf@linux:~$ func
random text
abc def jkl
random text
abc ghi jkl
random text
wolf@linux:~$ 

효과가있다.

wolf@linux:~$ func abc
abc def jkl
abc ghi jkl
wolf@linux:~$ 

그런데 또 다른 문제가 생겼습니다. 여러 함수를 정의했지만 그 내용을 잊어버렸습니다.

alias al위의 명령과 유사한 함수의 내용을 볼 수 있는 방법이 있습니까 ?

답변1

type NAME(또는 type -a NAME 동일한 이름으로 여러 명령이 정의된 경우) 다음을 수행합니다.

$ func(){ grep "$1" file.txt; }
$ type func
func is a function
func () 
{ 
    grep --color=auto "$1" file.txt
}

답변2

함수가 실행되는 코드를 봅니다 set.

$1별칭 내에서 작동하지 않기 때문에 별칭이 작동하지 않습니다. 별칭은 단지 텍스트 대체일 뿐이며 기능이 아닙니다. 따라서 별칭이 있는 경우

alias foo='bar "$1" baz'

그런 다음 foo명령줄에 입력하면 쉘은 마치 입력한 것처럼 작동 합니다 bar "$1" baz.foo somethingbar "$1" baz somethingbar something baz

답변3

이것은 주제에서 벗어난 답변입니다. grep별칭이 기능 없이 작동하도록 만듭니다 .

다음에서 차용하고 각색했습니다.이 스택오버플로우 게시물:

alias al='grep file.txt -f - <<<'

그 다음에:

$ cat file.txt
aaa
bbb
ccc
$ al a
aaa

-f -grep에게 파일의 표현식을 사용하도록 지시 하지만 여기 파일은 이므로 -stdin에서 표현식을 읽습니다. 그런 다음 bash here-string을 사용하여 문자열 내용을 표준 입력으로 리디렉션합니다. 이를 통해 grep표현식을 명령 끝에 배치할 수 있으며, 이것이 바로 별칭이 작동하는 데 필요한 것입니다.

관련 정보