Anda menetapkan files
sebagai variabel skalar alih-alih variabel array .
Di
files=$HOME/print/*.pdf
Anda menetapkan beberapa string seperti /home/highsciguy/print/*.pdf
ke $files
variabel 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 sh
alih - alih di bash
sini dengan menuliskannya:
#!/bin/sh -
[ "$#" -gt 0 ] || set -- ~/print/*.pdf
for file do
ls -d -- "$file"
done
set
adalah 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 $files
tidak 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 $HOME
berisi karakter wildcard, mereka dapat diperluas juga, itulah sebabnya mengapa masih lebih disukai untuk menggunakan variabel array.
files=$*
pernah biasa ? Itu salah .