Linux, kein Fehler

Linux, kein Fehler

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 cpBefehl 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.txtwird versucht, die drei Dateien als Parameter für zu verwenden cp.

Sie können dies alles überprüfen, indem Sie set -xvor 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

verwandte Informationen