Necesito expandir un patrón global (como ../smth*/*, o /etc/cron*/) en una lista de archivos, mediante programación. ¿Cuál sería la mejor manera de hacerlo?
No necesita hacer nada especial, simplemente no cite el *.
Kevin
1
Aunque si vas a intentar analizarlo, usa una matriz como dice la respuesta.
Kevin
Respuestas:
40
Simplemente deje que se expanda dentro del lado derecho de una declaración de matriz:
list=(../smth*/)# grab the list
echo "${#list[@]}"# print array length
echo "${list[@]}"# print array elementsfor file in"${list[@]}";do echo "$file";done# loop over the array
Tenga en cuenta que la opción de shell nullglobdebe establecerse. No está configurado por defecto.
Evita un error en caso de que el globo (o uno de varios globos) no coincida con ningún nombre.
*
.Respuestas:
Simplemente deje que se expanda dentro del lado derecho de una declaración de matriz:
Tenga en cuenta que la opción de shell
nullglob
debe establecerse.No está configurado por defecto.
Evita un error en caso de que el globo (o uno de varios globos) no coincida con ningún nombre.
Configúralo
bash
cono
zsh
confuente
unsetopt
y el mismo parámetro utilizado parasetopt
.No es necesario complicar demasiado las cosas:
fuente
TEST=$(echo your/stuff*) && eval \"$TEST\"
saldrá:your/stuff*: No such file or directory
TEST
variable como una cadena que incluye*
y no se expande.