Предотвращение сбоев в скрипте bash

Я пытаюсь написать скрипт, который будет работать с выбранными файлами.

#!/bin/bash
#ytest
lastArgNo=$#
sPattern=${!lastArgNo}
echo "operating on $sPattern"
#do operation on $sPattern
for sFile in $sPattern do
    #do something with each file
done

Если я запускаю этот скрипт с параметрами *.JPG, я получаю

operating on IMG_1282.JPG

который является последним файлом, найденным для шаблона *.JPG, и только этот файл обрабатывается. Мне нужен фактический шаблон файла, который указан в командной строке. Заранее спасибо.

1 ответ

Вы не можете получить фактический шаблон: оболочка уже расширила его перед запуском вашего скрипта. Вы получаете фактические файлы в качестве аргументов, так что вам следует перебирать все аргументы:

#!/bin/bash
echo "operating on $# files"
for file; do
    # do something with each "$file"
done

То, что вы делаете, это устанавливаете lastArgNo в число аргументов, используя косвенное расширение переменной, чтобы установить sPattern в значение последнего аргумента. Если вы сделали arg=1; sPattern=${!arg} Вы должны установить sPattern на первый аргумент.

Другие вопросы по тегам