2014-09-29 6 views
0

Я создаю скрипт оболочки korn, который пытается выполнить некоторые задачи, связанные с шаблоном ls и с именем файла.Петля с KSH или BASH из ls + pattern

Если я жёстко шаблон внутри сценария, то он работает:

for my_archive in ls FAC* 
do 
echo $my_archive 
done 

Но если я посылаю образец по парам, только дает мне первое вхождение:

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 

если код будет сохранен как `тест, запустить код как

test "FAC*" так, чтобы подстановочный шаблон был расширен до исключения сценария.