
Así que estoy creando una función que realiza un bucle for en todos los archivos de un directorio como un argumento dado e imprime todos los archivos y directorios:
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
Sin embargo, cuando ejecuto el script, solo imprime el primer archivo del directorio.
¿Algunas ideas?
Respuesta1
Si está intentando iterar sobre archivos en un directorio, debe agrupar el directorio de esta manera:
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
Entonces llámalo como:
$ list ~
Alternativamente, si desea pasar varios archivos como argumentos, puede escribir su for
bucle de esta manera:
List () {
for item
do
echo "$item"
done
}
Que luego se puede llamar como:
$ list ~/*
¿Qué pasa con su función actual?
Cuando lo llama con un globo, pasa cada archivo en el directorio como un argumento separado. Digamos que su directorio de inicio contiene file1
, file2
y file3
. Cuando llamas list ~/*
, básicamente estás llamando:
list ~/file1 ~/file2 ~/file3
Entonces a su for
bucle solo se le pasa el parámetro posicional 1 for item in ~/file1
y los demás parámetros posicionales no se utilizan.
También gracias a Ilkkachu por señalar que también olvidaste un /
en tu hashbang, que yo me perdí por completo.