![GREP을 사용하여 파일에서 텍스트를 추출하고 배열에 저장하는 Bash 구문](https://linux55.com/image/163427/GREP%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%98%EA%B3%A0%20%EB%B0%B0%EC%97%B4%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%98%EB%8A%94%20Bash%20%EA%B5%AC%EB%AC%B8.png)
나는 최근 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
.
mapfile
ksh는 ksh93t+ 이전 버전, 즉 <( ...)
프로세스 교체 구문을 지원하지 않습니다.리디렉션 대상으로 사용되는 경우, 예를 들어 <
. 에 의해 명확화됨스티븐 차제라스.
bash를 호출하도록 sh-bang 줄을 수정합니다(또는 그러한 경우 ksh 대신 bash를 명시적으로 호출합니다).
또한 grep
모든 옵션 앞에 인수를 넣기 때문에 명령이 불평합니다.
grep -w "${ID}" /etc/passwd
(변수 확장으로도 인용됨)