Se você estiver tentando fazer a iteração de arquivos em um diretório, precisará globalizar o diretório da seguinte forma:
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
Em seguida, chame como:
$ list ~
Alternativamente, se você quiser passar múltiplos arquivos como argumentos, você pode escrever o seu laço for
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 pessoal contenha file1
, file2
e file3
. Quando você chama list ~/*
, você está essencialmente chamando:
list ~/file1 ~/file2 ~/file3
Então o seu for
loop está sendo passado apenas pelo parâmetro posicional 1, então for item in ~/file1
e os outros parâmetros posicionais não são usados.
Também agradeço a Ilkkachu por apontar que você também esqueceu um /
em seu hashbang, o que eu perdi completamente.