~$ echo $(ls)
arguments.txt cecho.sh Desktop Documents Downloads example.txt Music Pictures Public
~$ echo $(ls "*.txt")
ls: cannot access *.txt: No such file or directory
Mengapa perintah subkulit ke-2 gagal?
Hapus tanda kutip di sekitar *.txt
dan itu harus bekerja. Dengan tanda kutip shell akan mencari nama file literal *.txt
. Untuk menjelajahi / eksperimen, mencoba membuat file dengan nama *.txt
sebagai touch '*.txt'
dan ulangi perintah.
bash
dan sejenisnya miripzsh
) tidak sama dengan tanda kutip tunggal! Misalnya, ekspansi parameter ($foo
) dilakukan di dalam tanda kutip ganda, tetapi bukan tanda kutip tunggal.Dengan cara yang sama Anda tidak dapat menjalankan
ls "*.txt"
shell yang normal, Anda juga tidak bisa menjalankannya dalam subshell. Ketika Anda memberi*.txt
tanda kutip, Andals
mencari file literal yang disebut*.txt
kapan Anda seharusnya melakukan ini:Cara yang lebih baik untuk melakukan ini adalah tidak menggunakan
ls
sama sekali.sumber
ls
.ls -l "*.txt"
. Atau setidaknya saya bisa. Saya tidak sering melakukannya, tetapi ketika saya melakukannya, biasanya memberitahu saya bahwa itu tidak dapat menemukan * .txt ...