Saya perlu memperluas pola gumpalan (seperti ../smth*/*, atau /etc/cron*/) ke dalam daftar file, secara terprogram. Apa cara terbaik untuk melakukannya?
Anda tidak perlu melakukan sesuatu yang istimewa, hanya saja jangan mengutip *.
Kevin
1
Meskipun jika Anda akan mencoba menguraikannya, gunakan array seperti yang dikatakan jawabannya.
Kevin
Jawaban:
40
Biarkan saja diperluas di sisi kanan deklarasi array:
list=(../smth*/)# grab the list
echo "${#list[@]}"# print array length
echo "${list[@]}"# print array elementsfor file in"${list[@]}";do echo "$file";done# loop over the array
Perhatikan bahwa opsi shell nullglobperlu diatur. Ini tidak diatur secara default.
Ini mencegah kesalahan jika glob (atau salah satu dari banyak gumpalan) tidak cocok dengan nama apa pun.
*
.Jawaban:
Biarkan saja diperluas di sisi kanan deklarasi array:
Perhatikan bahwa opsi shell
nullglob
perlu diatur.Ini tidak diatur secara default.
Ini mencegah kesalahan jika glob (atau salah satu dari banyak gumpalan) tidak cocok dengan nama apa pun.
Atur
bash
denganatau
zsh
dengansumber
unsetopt
dan parameter yang sama seperti yang digunakan untuksetopt
.Tidak perlu terlalu rumit:
sumber
TEST=$(echo your/stuff*) && eval \"$TEST\"
akan menampilkan:your/stuff*: No such file or directory
TEST
variabel sebagai string termasuk*
dan tidak diperluas.