Como criar uma matriz possivelmente vazia do nome do arquivo glob?

3

Com zsh , não é difícil criar uma matriz possivelmente vazia dos resultados de um glob (nome do arquivo) (possivelmente nulo). Por exemplo:

% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0

Com bash , no entanto, a aproximação mais aproximada que eu posso fazer com o código acima falha ao produzir um array vazio quando o glob é nulo:

% pathlist=( /no/such/path/*    ); printf -- "%d\n" ${#pathlist[@]} )
1

Nesse caso, a variável pathlist contém uma única entrada, ou seja, a string "/ no / such / path /*".

Como posso modificar o código bash para que pathlist contenha exatamente uma entrada para cada arquivo ( se houver ) que corresponda à glob?

    
por kjo 26.02.2018 / 23:58

1 resposta

7

Você precisa usar a opção de shell nullglob

#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/*    ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob

O manual do Bash diz o seguinte sobre a opção nullglob shell:

If set, Bash allows filename patterns which match no files to expand to a null string, rather than themselves.

    
por 27.02.2018 / 00:01