
Então, estou criando uma função que faz um loop for em todos os arquivos de um diretório como um determinado argumento e imprime todos os arquivos e diretórios:
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
No entanto, quando executo o script, ele imprime apenas o primeiro arquivo do diretório.
Alguma ideia?
Responder1
Se você estiver tentando iterar arquivos em um diretório, precisará globá-lo da seguinte forma:
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
Então chame assim:
$ list ~
Alternativamente, se você quiser passar vários arquivos como argumentos, você pode escrever seu for
loop assim:
List () {
for item
do
echo "$item"
done
}
Que pode então ser chamado como:
$ list ~/*
O que há de errado com sua função atual:
Quando você o chama com um glob, ele passa cada arquivo no diretório como um argumento separado. Digamos que seu diretório inicial contenha file1
, file2
e file3
. Quando você liga list ~/*
, você está essencialmente ligando:
list ~/file1 ~/file2 ~/file3
Então seu for
loop está recebendo apenas o parâmetro posicional 1 for item in ~/file1
e os outros parâmetros posicionais não são utilizados.
Agradeço também a Ilkkachu por apontar que você também esqueceu um /
no seu hashbang, o que eu perdi completamente.