我正在制作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
答案 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*"
以便在脚本执行之前扩展通配符。