2013-04-11 152 views
4

我试图循环匹配通配符的目录。这在命令行中工作正常。但在Shell脚本中不起作用。任何想法?shell脚本通过通配符匹配的目录进行循环

for dirs in /var/www/html/my.domain.com/v*; do echo $dirs; done; 

上述命令列表

/var/www/html/my.domain.com/v1.0 
    /var/www/html/my.domain.com/v1.2 
    /var/www/html/my.domain.com/v2.0 

这里是壳牌脚本版本。它不工作:

dirs=/var/www/html/my.domain.com/v* 
for dir in $dirs 
do 
    echo "$dir" 
done 

想这太:

dirs=`/var/www/html/my.domain.com/v*` #back quotes 
for dir in $dirs 
do 
    echo "$dir" 
done 
+0

该示例仅适用于我 - 没有任何引用。你在这个剧本中的某处使用过“shopt”吗? – hek2mgl 2013-04-11 17:08:09

+0

此外请注意,使用反引号的引用将启动一个子shell并返回它的输出。所以,在反引号中只有命令是有意义的 – hek2mgl 2013-04-11 17:10:00

+0

@ hek2mgl号只是一些其他的代码。但无处使用'shopt' – 2013-04-11 17:10:21

回答

3

Glob patterns/var/www/html/my.domain.com/v*庆典功能。看起来bash不是您系统上的默认shell,因为您使用sh script.sh启动脚本。

确保启动脚本使用bash:

bash script.sh 

如果你打算做直接使用chmod +x script.sh脚本可执行,确保您不会错过在第一行使用以下shebang

#!/bin/bash