Das Platzhalterzeichen „*“ passt nicht zu einer Zeichenfolge?

Das Platzhalterzeichen „*“ passt nicht zu einer Zeichenfolge?
ls  -al  .functions*
-rw-r--r-- 1 root root 471040 Mar  2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar  2 09:57 .functions.php.swp

*kann übereinstimmen .php.swound .php.swp
warum *kann nicht übereinstimmen .functions.php?

ls  -al  *.swo
ls: cannot access '*.swo': No such file or directory
ls  -al  *swo
ls: cannot access '*swo': No such file or directory

Antwort1

Dateien, die mit einem Punkt beginnen, werden standardmäßig aus der Dateiliste ausgeblendet. Der einfachste Weg, diese Art von Dateien abzugleichen, besteht darin, am Anfang des Ausdrucks einen Punkt einzufügen. Dies trifft jedoch nur auf Dateien zu, die mit beginnen ..

ls  -al  .*.swo

dotglobDie Alternative besteht darin , vor dem Ausführen des Befehls festzulegen . Dann .werden Dateien eingeschlossen, die mit beginnen.

shopt -s dotglob

Fügen Sie es hinzu, um ~/.bashrces als Standard festzulegen.

Beachten Sie, dassEinstellung dotglobkann zu unbeabsichtigten Ergebnissen führenbei Verwendung der Bash-Shell, da bei Verwendung sowohl .(aktuelles Verzeichnis) als auch ..(übergeordnetes Verzeichnis) angezeigt werden *. Mit dotglobset,niemalsversuchen zu benutzen rm -R *.

Antwort2

AlsVerlängerungZu Shaidos Antwort möchte ich einige Erklärungen geben, warum die -aOption hier nicht funktioniert:

Der lsBefehlnichtPlatzhalter verarbeiten. Der Kommandozeileninterpreter führt dazu folgende Schritte aus:

Wenn Sie die Befehlszeile " mycommand *.c" eingeben, ersetzt der Befehlszeileninterpreter zuerst die Platzhalterzeichenfolge " *.c" durch die Liste der übereinstimmenden Dateien und führt dann die resultierende Befehlszeile aus:

mycommand a.c file.c test.c

Der Kommandozeileninterpreter arbeitet für alle Befehle gleich und kann daher nicht wissen, was -abei dem lsBefehl „versteckte Dateien einschließen“ bedeutet (während es -abei anderen Befehlen eine völlig andere Bedeutung hat)...

verwandte Informationen