2014-09-29 64 views
0

我正在制作korn shell脚本,它尝试执行从ls和文件名模式循环的一些任务。从ls +模式与KSH或BASH循环

如果我硬编码在脚本中的模式,然后它的工作原理:

for my_archive in ls FAC* 
do 
echo $my_archive 
done 

但是,如果我通过PARAM发送模式,只给了我第一次出现:

for my_archive in ls $1 
do 
    echo $my_archive 
done 

回答

1

首先,你不“不想‘LS’中就有

我猜你打电话给你的函数类似这样的

myfunc FAC* 

在这种情况下,外壳在之前扩展调用函数。所以,你居然有这样的事:

myfunc FAC1 FAC2 FAC3 ... 

当您使用$ 1,你随便挑的第一个文件而忽略其他

在你的功能,使用此:

function myfunc { 
    for my_archive in "[email protected]"; do 
     echo "$my_archive" 
    done 
} 

使用完全符合我的要求的引号将保护名称中包含空格的任何文件。

1

首先要使用for来循环目录中的文件,不需要ls。简单通配符“*”将展开到目录中的文件列表中。

for my_archive in FAC* 
do 
echo $my_archive 
done 

将使输出作为

FACfoo 
FACbar 
FAC123 

现在第二代码变化

for my_archive in $1 
do 
    echo $my_archive 
done 

如果代码被保存为`测试,运行代码as

test "FAC*" ,以便在执行脚本之前扩展通配符。