Я розумію, що таке розширення брекетів , але не знаю, як найкраще його використовувати.
Коли ви використовуєте його?
Будь ласка, навчіть мене кілька зручних і чудових прикладів, якщо у вас є своя порада.
Я розумію, що таке розширення брекетів , але не знаю, як найкраще його використовувати.
Коли ви використовуєте його?
Будь ласка, навчіть мене кілька зручних і чудових прикладів, якщо у вас є своя порада.
Відповіді:
Розширення дужок дуже корисно, якщо у вас є довгі назви шляху. Я використовую це як швидкий спосіб резервного копіювання файлу :
cp /a/really/long/path/to/some/file.txt{,.bak}
буде скопійовано /a/really/long/path/to/some/file.txt
в/a/really/long/path/to/some/file.txt.bak
Ви також можете використовувати його в послідовності . Я колись робив це для завантаження багатьох сторінок з Інтернету:
wget http://domain.com/book/page{1..5}.html
або
for i in {1..100}
do
#do something 100 times
done
program
отримує три слова: "-f file1" "-f file2" "-f file3"
замість 6 : "-f" "file1" "-f" "file2" "-f" "file3"
.
for
циклі трохи безглуздо, оскільки ви можете писати, for ((i=1; i<=100; i++))
і це більш ефективно.
Розширення брекетів дуже зручно при створенні великих структур каталогів:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Це вам дасть
find dir1 -type d
dir1
dir1/subdir1
dir1/subdir1/subsubdir1
dir1/subdir1/subsubdir2
dir1/subdir2
dir1/subdir2/subsubdir1
dir1/subdir2/subsubdir2
Ви навіть можете піти на крок далі і поставити розширення дужок в розширення дужок:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Це дасть вам таку саму структуру каталогу, як приклад вище.
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) насправді не виконує жодної мети. Ви могли б просто зробити це: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.
subdir1
і subdir2
в нелітеральному сенсі. Замінити subdir1
з cat
і subdir2
з dog
, наприклад.
Я використовую його, щоб порівняти фактичний вихідний тест з потрібним випробувальним результатом під час розробки. Якщо тест № 41 не вдається, легко зрозуміти, у чому різниця між тестовим результатом (у файлі тести.
$ diff tests.{out,output}/041
Деякі часті випадки для мене:
Для перейменування:
mv myText.{txt,tex}
або
mv myText.tex{,.old}
або
cp myText.tex{,.backup}
(Хоча використовувати керування версіями для останніх двох завдань менш брудно).)
Для порівняння (вже згадане):
diff path{1,2}/a.txt
Тут є кілька чудових відповідей, але жоден з них не згадує, коли не використовувати розширення дужок. Як і інші відповіді, я досить широко використовую розширення дужок у командному рядку. Я також використовую його у своїх псевдонімах та функціях, оскільки можу очікувати розумної оболонки.
Я не використовую його у своїх скриптах оболонки (якщо не існує іншої причини, за якою скрипти повинні бути bash або zsh, хоча в цих випадках найкраще оновити до "справжньої" мови сценаріїв, як perl
або python
). Розширення дужки не є портативним, оскільки воно не є стандартом оболонки POSIX. Навіть якщо він працює в ваших /bin/sh
- притон скриптів ред оболонки, він не буде працювати на системах з більш роздягли /bin/sh
оболонок (наприклад dash
).
У разі різниці однієї цифри вам не потрібно розширення дужок; класу символів буде достатньо:
Башизм:
diff file{1,2}
Портативний:
diff file[12]
file{1,2}
вона завжди буде розширюватися до file1 file2
, тоді як file[12]
розширюватиметься лише до існуючих імен файлів: тобто, якщо file1
існує, але file2
ні, file[12]
розширюється file1
лише на. []
Розширення дійсно обмежена версія ?
розширення (і вони називаються «ім'я шляху розширення»).
program -f file1 -f file2 -f file3
, ви можете зробитиprogram "-f file"{1..3}