GREP을 사용하여 파일에서 텍스트를 추출하고 배열에 저장하는 Bash 구문

GREP을 사용하여 파일에서 텍스트를 추출하고 배열에 저장하는 Bash 구문

나는 최근 bash 4.2.46에 업그레이드했습니다bash version 4.2.50

다음 줄을 포함하는 스크립트가 있습니다.

mapfile -t my_array < <(grep ${ID} -w /etc/passwd | cut -d ":" -f 1,4,5)

여기서 ID는 파일에서 찾고 passwd모든 결과를 배열에 로드하려는 정수입니다.

이전에는 작동했지만 이제는 오류가 발생합니다.

usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
        [-f pattern_file...] [file...]
usage: grep [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
        -f pattern_file... [file...]

이 감가상각 문제를 해결하는 방법을 설명해 줄 수 있는 사람이 있나요? 을 사용해 보았 sed으나 awk출력 리디렉션 형식에 문제가 있는 것 같습니다.

텍스트 파일은 passwd다음과 같습니다 name:garbageData:garbageData:ID:password

답변1

bash 대신 ksh를 사용하여 스크립트를 실행하면 sh-bang 헤더 행이 ksh를 잘못 가리키거나 /bin/sh(AIX의 경우 ksh)를 가리키거나 명시적으로 호출하는 경우 오류가 발생합니다 ksh /the/script.

mapfileksh는 ksh93t+ 이전 버전, 즉 <( ...)프로세스 교체 구문을 지원하지 않습니다.리디렉션 대상으로 사용되는 경우, 예를 들어 <. 에 의해 명확화됨스티븐 차제라스.

bash를 호출하도록 sh-bang 줄을 수정합니다(또는 그러한 경우 ksh 대신 bash를 명시적으로 호출합니다).

또한 grep모든 옵션 앞에 인수를 넣기 때문에 명령이 불평합니다.

grep -w "${ID}" /etc/passwd

(변수 확장으로도 인용됨)

관련 정보