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