Der Unterschied besteht darin, dass einer eine Liste und der andere eine Sequenz ist. {1,2,3}
erweitert , um drei bestimmte Elemente, 1
, 2
, und 3
. {1..3}
Erweitert die Liste der Zahlen zwischen eins und drei. In diesem speziellen Fall sind sie identisch und Sie können eine der beiden Optionen verwenden. file.*
wird auf alle Dateien und Verzeichnisse im aktuellen Verzeichnis erweitert, deren Name mit beginnt file.
. Wenn Sie nur haben file.1
, file.2
und file.3
dann ist das auch gleichbedeutend mit den anderen beiden.
Was die verursachenden Probleme angeht, verstehe ich nicht warum. Sie könnten darüber nachdenken
$ cat file.* > file.txt
cat: file.txt: input file is output file
Das ist jedoch ein ganz anderes Thema. Das einzige andere Problem, an das ich denken kann, ist, dass Ihre Shell die Dateien möglicherweise nicht in der richtigen Reihenfolge auflistet. Beispielsweise:
$ touch file1 file11 file2
$ echo file*
file1 file11 file2
Um das zu lösen, können Sie zsh
anstelle von bash
(siehe hier für Details) verwenden:
% echo f*(n)
file1 file2 file11
Im Allgemeinen sind die drei Ansätze nicht gleich. Es hängt davon ab, was Sie tun möchten. In den Fällen, in denen die drei dann die gleiche Ausgabe zurückgeben, können Sie eine von ihnen verwenden. Es macht keinen Unterschied. Alle diese Erweiterungen werden von der Shell ausgeführt und erfolgen, bevor sie an einen beliebigen Befehl übergeben werden, der sie verwendet.
cat file.[123] >file