从 bash 脚本中的配置文本文件创建动态字符串变量

从 bash 脚本中的配置文本文件创建动态字符串变量

我想创建一个动态字符串变量,它保存来自配置文本文件的文件扩展名,如下所示。不好的是字符串值包含正则表达式:

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

其中 log、txt 和 png 扩展名是从名为 excepted_ext.txt 的文本文件中获取的。所以exclusive_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

相关内容