Globs não são expandidos em citações . Você pode expandi-los dentro de scripts, mas é uma prática muito ruim (E se alguém tivesse um nome de arquivo contendo *
ou ?
? Eles não seriam capazes de usar seu script para manipulá-lo) . A melhor prática é citar todas as referências de variáveis nos scripts e passar os caminhos reais para os scripts:
$ mkdir sample
$ touch sample/File1 sample/File2
$ cat script.sh
#!/bin/sh
F="$1"
echo "$F"
ls "$F"
$ ./script.sh sample/Fil*
sample/File1
sample/File1
Ou melhor ainda, faça um loop sobre todos os arquivos:
$ cat script.sh
#!/bin/sh
for path
do
echo "$path"
ls "$path"
done
$ ./script.sh sample/Fil*
sample/File1
sample/File1
sample/File2
sample/File2
Se você quiser codificar parte do caminho, você pode usar find
para expandi-lo:
while IFS= read -r -d '' -u 9 path
do
ls -- "$path"
done 9< <( find "sample" -name "$1" -exec printf '%s$ mkdir sample
$ touch sample/File1 sample/File2
$ cat script.sh
#!/bin/sh
F="$1"
echo "$F"
ls "$F"
$ ./script.sh sample/Fil*
sample/File1
sample/File1
' {} + )