Anda menetapkan filessebagai variabel skalar alih-alih variabel array .
Di
files=$HOME/print/*.pdf
Anda menetapkan beberapa string seperti /home/highsciguy/print/*.pdfke $filesvariabel skalar (alias string).
Menggunakan:
files=(~/print/*.pdf)
atau
files=("$HOME"/print/*.pdf)
sebagai gantinya. Shell akan memperluas pola globbing ke daftar path file, dan menetapkan masing-masing ke elemen $files array .
Perluasan glob dilakukan pada saat penugasan.
Anda tidak harus menggunakan fitur sh non-standar, dan Anda bisa menggunakan sistem Anda shalih - alih di bashsini dengan menuliskannya:
#!/bin/sh -
[ "$#" -gt 0 ] || set -- ~/print/*.pdf
for file do
ls -d -- "$file"
done
setadalah untuk menetapkan "$@"berbagai parameter posisi.
Pendekatan lain bisa saja menyimpan pola globbing dalam variabel skalar:
files=$HOME/print/*.pdf
Dan memiliki shell memperluas gumpalan pada saat $files variabel diperluas.
IFS= # disable word splitting
for file in $files; do ...
Di sini, karena $filestidak dikutip (yang biasanya tidak Anda lakukan), perluasannya tunduk pada pemisahan kata (yang kami nonaktifkan di sini) dan pembuatan globbing / namafile.
Jadi *.pdf akan diperluas ke daftar file yang cocok. Namun, jika $HOMEberisi karakter wildcard, mereka dapat diperluas juga, itulah sebabnya mengapa masih lebih disukai untuk menggunakan variabel array.
files=$*pernah biasa ? Itu salah .