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
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.
Configúralo
bashcono
zshconfuente
unsetopty 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 directoryTESTvariable como una cadena que incluye*y no se expande.