El bucle For no funciona en una función con argumentos

El bucle For no funciona en una función con argumentos

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 forbucle 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, file2y file3. Cuando llamas list ~/*, básicamente estás llamando:

list ~/file1 ~/file2 ~/file3

Entonces a su forbucle solo se le pasa el parámetro posicional 1 for item in ~/file1y 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.

información relacionada