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