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
。请看一下我的最新答案。比尔。