arrFormat=( jpg jpeg bmp tiff png )
varExtension="jpg"
for elem in "${arrFormat[@]}"
do
echo "${elem}"
# do something on $elem #
done
#for i in $( find -E . -iregex '.*\.($arrFormat)' ) ; do #problem
#for i in $( find -E . -iregex '.*\.("$arrFormat")' ) ; do #problem
#for i in $( find -E . -iregex '.*\.($varExtension)' ) ; do #problem
#for i in $( find -E . -iregex '.*\.("$varExtension")' ) ; do #problem
for i in $( find -E . -iregex '.*\.(jpg|png)' ) ; do # this works fine
echo "${i}"
# do something on $i #
done
所以看起来正则表达式的变量有问题我怎样才能给一个数组或一个变量作为正则表达式的参数
外壳信息,MACINTOSH:
Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 x86_64
答案1
问题是单引号。变量不会用单引号展开(来自man bash
):
将字符括在单引号中可保留引号内每个字符的字面值。
如果要使用变量,则需要双引号。为了显示:
$ foo="bar"
$ echo '$foo'
$foo
$ echo "$foo"
bar
所以,就你而言,你想要这样的东西:
for i in $( find -E . -iregex ".*\.$varExtension") ; do
或者,自上述以来更好无法处理奇怪的文件名:
find -E . -iregex ".*\.$varExtension" -print0 | while IFS= read -r -d '' i; do
或者,忘记循环并完成find
适合您的工作:
find -E . -iregex ".*\.$varExtension" -exec something {} \;