Vamos contar o número de erros em:
FILENAME=$(echo $INFILE | grep -oE "[^/]+$")
-
echo não deve ser usado para dados arbitrários . Dependendo da implementação, ele falhará se $INFILE começar com - ou contiver barras invertidas ou ambas.
-
Deixar uma variável sem aspas é o operador split + glob . Isso fará com que o acima falhe por muitos valores possíveis de
$INFILE . As variáveis nunca devem ser deixadas sem aspas, a menos que você tenha uma boa razão para não fazê-lo.
-
grep funciona em cada linha de sua entrada, enquanto aqui você quer que ele faça apenas a cadeia inteira.
- Se
$INFILE for /some/dir/ ou / , isso retornará a string vazia em vez de dir ou / .
- A opção
-o é específica do GNU, então só funcionará onde grep é o GNU grep .
- cosmético / convenção: todos os nomes de variáveis de letras maiúsculas devem ser reservados para variáveis de ambiente.
A substituição de comandos - remove os caracteres de nova linha à direita, portanto, o acima não funcionará se
$INFILE terminar em caracteres de nova linha.
Para obter o nome base de um arquivo, há um comando padrão para isso:
filename=$(basename -- "$infile")
Ou para evitar (7) acima:
filename=$(basename -- "$infile"; echo .); filename=${filename%??}
Ou usando operadores de expansão de shell:
filename=${infile##*/}
(ainda tem problema (4) acima).