如何在bash中同时循环多个通配符?

如何在bash中同时循环多个通配符?,bash,shell,for-loop,wildcard,Bash,Shell,For Loop,Wildcard,在bash中,我编写了一个函数,该函数使用通配符在具有多个扩展名的目录中的文件上循环,并仅复制这些特定文件(如果存在)。代码片段如下所示: set -e pushd ../../../../$3/code/project/common/ > /dev/null mkdir -p ../$2 shopt -s nullglob for file in *.gyp; do cp $file ../$2/; done for file in *.gypi; do cp $file ..

在bash中,我编写了一个函数,该函数使用通配符在具有多个扩展名的目录中的文件上循环,并仅复制这些特定文件(如果存在)。代码片段如下所示:

set -e

pushd ../../../../$3/code/project/common/ > /dev/null
mkdir -p ../$2
shopt -s nullglob

for file in *.gyp; do   cp $file ../$2/; done
for file in *.gypi; do  cp $file ../$2/; done
for file in *.sh; do    cp $file ../$2/; done
for file in *.patch; do cp $file ../$2/; done

popd > /dev/null
相反,我更愿意为x语句中的文件编写一个
,这样我就不必为我要复制的每个扩展名复制并粘贴这一行


如何将四个
for
语句重写为一个
for
语句?如果可能的话,我想把
*.ext
通配符格式保存在那里。

您应该可以这样做

for file in *.gyp *.gypi *.sh *.patch; do   cp $file ../$2/; done
和一个
cp
命令:

cp -t ../"$2" *.{gyp,gypi,sh,patch}

始终引用您的变量,除非您确切知道您想要的副作用。

请参阅:识别代码中缺少引号的几个实例。我觉得很傻……我想我从来没有想到过这一点,或者这会起作用。谢谢你的回答!根据您的回答和Cyrus(来自上面),我将其改写为以下内容,更加紧凑:
for file in*{gyp,gypi,sh,patch};做cp$文件../$2/;完成
,这就是我要做的。再次感谢!假设一个用户传递了一个包含空格的目录名(如$2)。