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.