~$ 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
Warum schlägt der 2. Subshell-Befehl fehl?
Entfernen Sie die Anführungszeichen herum *.txt
und es sollte funktionieren. Bei Anführungszeichen sucht die Shell nach dem wörtlichen Dateinamen *.txt
. Um zu erforschen / Experiment versuchen , eine Datei mit dem Namen zu schaffen , *.txt
wie touch '*.txt'
und wiederholen Sie den Befehl.
bash
und ähnliche Shells wiezsh
) nicht mit einfachen Anführungszeichen identisch sind! Beispielsweise erfolgt die Parametererweiterung ($foo
) in doppelten Anführungszeichen, jedoch nicht in einfachen Anführungszeichen.So wie Sie
ls "*.txt"
eine normale Shell nicht ausführen können, können Sie sie auch nicht in einer Subshell ausführen. Bei der Eingabe*.txt
von Anführungszeichen haben Siels
nach einer Literaldatei gesucht, die aufgerufen wurde,*.txt
wenn Sie dies stattdessen tun sollten:Ein besserer Weg, dies zu tun, ist es, überhaupt nicht zu verwenden
ls
.quelle
ls
.ls -l "*.txt"
. Zumindest kann ich das. Ich mache es nicht oft, aber wenn ich es tue, sagt es mir normalerweise, dass es * .txt nicht finden konnte ...