从ls +模式循环使用KSH或BASH

时间:2014-09-29 17:49:04

标签: linux ksh

我正在制作korn shell脚本,尝试从ls和文件名模式循环执行某些任务。

如果我在脚本中硬编码模式,那么它可以工作:

for my_archive in ls FAC*
do
echo $my_archive
done

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

for my_archive in ls $1
 do
  echo $my_archive
 done

2 个答案:

答案 0 :(得分:1)

首先,你不想要" ls"在那里

我猜猜你这样称呼你的功能

myfunc FAC*

在这种情况下,shell会在调用函数之前扩展模式。所以,你实际上有这样的事情:

myfunc FAC1 FAC2 FAC3 ...

当您使用$ 1时,您只需选择第一个文件并忽略其余文件

在你的功能中,使用:

function myfunc {
    for my_archive in "$@"; do
        echo "$my_archive"
    done
}

完全按照我的说法使用引号将保护名称中包含空格的所有文件。

答案 1 :(得分: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

如果代码保存为`test,则将代码运行为

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