Bash 在for循环中连接数组的元素

Bash 在for循环中连接数组的元素,bash,for-loop,pattern-matching,Bash,For Loop,Pattern Matching,我有一个脚本,在这个脚本中,我试图匹配单词两侧文件名中的字符串。用于使用通配符进行模式匹配的关键字,如: ls*spin*.txt 当然,这将匹配以下任何文件名: one_spin.txt 4_5342spin-yyy.txt 50_spinout.txt ……等等 我想做的是使用单词“spin”和其他一些单词作为数组中的匹配案例,我可以通过一个循环。我希望这些匹配不区分大小写我尝试这样做: types=(spin wheel rotation) for file in $types; do

我有一个脚本,在这个脚本中,我试图匹配单词两侧文件名中的字符串。用于使用通配符进行模式匹配的关键字,如:

ls*spin*.txt

当然,这将匹配以下任何文件名:

one_spin.txt
4_5342spin-yyy.txt
50_spinout.txt

……等等

我想做的是使用单词“spin”和其他一些单词作为数组中的匹配案例,我可以通过一个循环。我希望这些匹配不区分大小写我尝试这样做:

types=(spin wheel rotation)

for file in $types; do
    ls '*'${file}'*.txt'
done
编辑:因为我正在寻找一个可行的解决方案,所以我也希望能够做到以下几点:

types=(spin wheel rotation)

for file in $types; do
    find . -iname "*$file*.txt"
done

我不确定bash是如何解释这两个文件的,除非看到它没有列出所需的文件。有人能澄清一下我的脚本中发生了什么,并提供一个满足上述标准的解决方案吗?

您的尝试将需要进行一些调整。分配
类型时
作为数组,您需要作为数组访问它。
请你试试:

types=(spin wheel rotation)

for file in "${types[@]}"; do
    ls *${file}*.txt
done
shopt -s extglob nocaseglob
ls *@(spin|wheel|rotation)*.txt
如果您的
bash
支持
shopt
内置,您还可以说:

shopt -s extglob
ls *@(spin|wheel|rotation)*.txt
如果要以不区分大小写的方式进行匹配,请尝试:

types=(spin wheel rotation)

for file in "${types[@]}"; do
    ls *${file}*.txt
done
shopt -s extglob nocaseglob
ls *@(spin|wheel|rotation)*.txt
它将匹配
one_Spin.txt
one_Spin out.txt
,等等


希望这能有所帮助。

您的尝试将通过更多的调整工作。分配
类型时
作为数组,您需要作为数组访问它。
请你试试:

types=(spin wheel rotation)

for file in "${types[@]}"; do
    ls *${file}*.txt
done
shopt -s extglob nocaseglob
ls *@(spin|wheel|rotation)*.txt
如果您的
bash
支持
shopt
内置,您还可以说:

shopt -s extglob
ls *@(spin|wheel|rotation)*.txt
如果要以不区分大小写的方式进行匹配,请尝试:

types=(spin wheel rotation)

for file in "${types[@]}"; do
    ls *${file}*.txt
done
shopt -s extglob nocaseglob
ls *@(spin|wheel|rotation)*.txt
它将匹配
one_Spin.txt
one_Spin out.txt
,等等


希望这能有所帮助。

不要让事情变得复杂,请试试这个

ls *{spin,wheel,rotation}*.txt
这也有助于创建文件

touch 1_{spin,wheel,rotation,ads,sad,zxc}_2.txt
或dirs

mkdir -p {test,test2/log,test3}

别把事情弄复杂了,请试试这个

ls *{spin,wheel,rotation}*.txt
这也有助于创建文件

touch 1_{spin,wheel,rotation,ads,sad,zxc}_2.txt
或dirs

mkdir -p {test,test2/log,test3}

谢谢-我需要学习内置的
shopt
。我看到了
extglob
选项,但我不完全理解它提供的
.sh
脚本模式。在这里找到了一个不错的概述:如果我想匹配并使其不区分大小写,该怎么办?类似于
echo-find-iname*${file}*.txt
感谢您的及时反馈。当然
find-iname“*$file*.txt”
可以工作。您还可以使用
shopt-snoaseglob
。请看一下我的最新答案。BR.谢谢-我需要学习内置的
shopt
。我看到了
extglob
选项,但我不完全理解它提供的
.sh
脚本模式。在这里找到了一个不错的概述:如果我想匹配并使其不区分大小写,该怎么办?类似于
echo-find-iname*${file}*.txt
感谢您的及时反馈。当然
find-iname“*$file*.txt”
可以工作。您还可以使用
shopt-snoaseglob
。请看一下我的最新答案。比尔。