Bash 스크립트의 구성 텍스트 파일에서 동적 문자열 변수 만들기

Bash 스크립트의 구성 텍스트 파일에서 동적 문자열 변수 만들기

아래와 같이 구성 텍스트 파일의 파일 확장자를 보유하는 동적 문자열 변수를 만들고 싶습니다. 나쁜 점은 문자열 값에 정규식이 포함되어 있다는 것입니다.

EXCLUDE_EXTENSION="\.(log|txt|png)$"

로그, txt 및 png 확장자는 Excepted_ext.txt라는 텍스트 파일에서 가져옵니다. 따라서clusive_ext.txt의 내용은 다음과 같습니다.

log
txt
png

따라서 Excepted_ext.txt에 다른 확장자를 추가할 때마다 EXCLUDE_EXTENSION 변수에 업데이트된 확장자를 가져옵니다. 예를 들어, Excepted_ext.txt에 추가 "log" 확장자를 추가하면

log
txt
png
log

그러면 EXCLUDE_EXTENSION 변수의 값이 자동으로 다음과 같이 업데이트되어야 합니다.

EXCLUDE_EXTENSION="\.(log|txt|png|log)$"

정규식을 사용해야 할 것 같은데 어떻게 해야 할지 모르겠습니다.

#!/bin/sh
# read from a text file
EXCLUDED_TEXT=`cat excluded_ext.txt`
# create array from the text file
# Im not sure how to go next.

답변1

사용 paste및 명령 대체:

EXCLUDE_EXTENSION='\.('"$(paste -d'|' -s excluded_ext.txt)"')$'

답변2

대신 (코드 조각에 표시된 대로) bash(제목에 따라)를 사용하는 경우 다음을 sh수행할 수 있습니다.

mapfile -t exts < excluded_ext.txt        # this creates the array

OldIFS="$IFS"
IFS='|'
printf -v exclude_extension '\.(%s)$' "${exts[*]}"
IFS="$OldIFS"

echo "$exclude_extension"

"${exts[*]}"로 확장되는 요소는 exts현재 의 첫 번째 문자로 구분됩니다 IFS.

관련 정보