echo "aaa" >abc.1.txt echo "bbb" >abc.2.txt cp abc*
Linux, kein Fehler
Fehler gleicher Befehl [ cp abc.1.txt abc.2.txt]
cp abc.* = cp abc.1.txt abc.2.txt
Warum?
Antwort1
Dies ist kein Fehler, sondern das beabsichtigte Verhalten für Shell-Variablenausdrücke.
Wie ulrich-schwarz richtig festgestellt hat, erfolgt die Variablenerweiterung, bevor Ihr cp
Befehl ausgeführt wird. Sie haben zwei Dateien, die die Bedingung des Ausdrucks erfüllen abc*
, daher wird er zu ihren vollständigen Namen erweitert.
Wenn Sie eine dritte Datei erstellen, abc.3.txt
wird versucht, die drei Dateien als Parameter für zu verwenden cp
.
Sie können dies alles überprüfen, indem Sie set -x
vor dem Ausführen des Befehls den Debugmodus () einstellen, der Ihnen jeden echten Befehl nach der Erweiterung so anzeigt, wie er ausgeführt wird. Denken Sie daran, den Debugmodus ( set +x
) zu deaktivieren, wenn Sie fertig sind.
$ echo "aaa" >abc.1.txt
$ echo "bbb" >abc.2.txt
$ ls
abc.1.txt abc.2.txt
$ set -x
$ cp abc*
+ cp abc.1.txt abc.2.txt
$ cat abc.2.*
+ cat abc.2.txt
aaa
$echo "ccc" > abc.3.txt
+ echo ccc
$ cp abc*
+ cp abc.1.txt abc.2.txt acb3.txt
cp: target «acb3.txt» is not a directory
$ cat abc.2.*
+ cat abc.2.txt
aaa
$ cat abc*
+ cat abc.1.txt abc.2.txt abc.3.txt
aaa
aaa
ccc
$ set +x
+ set +x