와일드카드와 와일드카드

와일드카드와 와일드카드

파이프라인의 첫 번째 프로그램이 아닌 프로그램에 대해 와일드카드를 확장해야 합니까? 각 예에서는 파이프라인의 첫 번째 프로그램에 와일드카드를 사용합니다.

예를 들어 다음은 작동하지 않습니다.

ls|grep *.h

이렇게 하면 와일드카드(?)를 확장하는 쉘이 아닌 grep이 됩니다.

ls|grep -E "*.h"

와일드카드가 첫 번째 파이프가 아닌 예가 있습니까? 제가 묻는 이유는 예를 들어 쉘을 구현 중이고 파이프라인의 첫 번째 프로그램에 와일드카드를 사용할 수 있지만 ls *.h후속 파이프라인에서는 이 작업을 수행해야 하는지 모르겠습니다.

배경은 제가 자체 쉘을 작성하고 와일드카드를 구현했다는 것입니다.

$ ls *.c|grep mai

[21822]
main.c
$ 

답변1

한 가지 예:

$ echo jeff > jeff
$ echo not > not
$ echo 's/jeff/not/' | sed -i -f - *
$ cat jeff
not

표준 셸에서 파일 이름/경로 이름 확장(와일드카드)을 처리하는 방법에 대한 자세한 내용은 다음을 참조하세요.

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_06그것은 말한다:

필드 분할 후 set -f가 적용되지 않으면 결과 명령줄의 각 필드는 파일 이름 확장에 사용되는 패턴의 규칙에 따라 한정된 패턴 일치 표기법에 설명된 알고리즘을 사용하여 확장되어야 합니다.

관련 정보