Різниця полягає в тому, що один - це список, а інший - послідовність. {1,2,3}
розширюється до трьох конкретних елементів, 1
, 2
, і 3
. {1..3}
розширюється до списку чисел від одного до трьох. У цьому конкретному випадку вони однакові, і ви можете використовувати будь-яке з двох. file.*
розшириться на всі файли та каталоги в поточному каталозі, з якого починається ім'я file.
. Якщо у вас є тільки file.1
, то file.2
і file.3
це теж еквівалентно двом іншим.
Що стосується її спричинення проблем, я не розумію, чому. Ви можете задуматися
$ cat file.* > file.txt
cat: file.txt: input file is output file
Це, однак, зовсім інше питання. Єдина інша проблема, яку я можу придумати, - це те, що ваша оболонка може не перераховувати файли у правильному порядку. Наприклад:
$ touch file1 file11 file2
$ echo file*
file1 file11 file2
Щоб вирішити це, ви можете використовувати zsh
замість bash
(детальніше див. Тут ):
% echo f*(n)
file1 file2 file11
Загалом, три підходи не однакові. Це залежить від того, що ви хочете зробити. У тих випадках, коли троє повертають один і той же результат, так, так, ви можете використовувати будь-який з них. Це не має ніякої різниці. Усі ці розширення виконуються оболонкою і відбуваються до того, як вони будуть передані будь-якій команді, яка їх використовує.
cat file.[123] >file