Предотвращение сбоев в скрипте 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 на первый аргумент.