Rozumiem, czym jest rozszerzenie nawiasów klamrowych , ale nie wiem, jak najlepiej go używać.
Kiedy go używasz?
Naucz mnie kilku wygodnych i niezwykłych przykładów, jeśli masz własną wskazówkę.
Rozumiem, czym jest rozszerzenie nawiasów klamrowych , ale nie wiem, jak najlepiej go używać.
Kiedy go używasz?
Naucz mnie kilku wygodnych i niezwykłych przykładów, jeśli masz własną wskazówkę.
Rozwijanie nawiasów jest bardzo przydatne, jeśli masz długie nazwy ścieżek. Używam go jako szybkiego sposobu na wykonanie kopii zapasowej pliku :
cp /a/really/long/path/to/some/file.txt{,.bak}
skopiuje /a/really/long/path/to/some/file.txt
do/a/really/long/path/to/some/file.txt.bak
Możesz także użyć go w sekwencji . Kiedyś tak zrobiłem, aby pobrać wiele stron z Internetu:
wget http://domain.com/book/page{1..5}.html
lub
for i in {1..100}
do
#do something 100 times
done
program -f file1 -f file2 -f file3
możesz zrobićprogram "-f file"{1..3}
program
dostaje trzy słowa:"-f file1" "-f file2" "-f file3"
zamiast 6:"-f" "file1" "-f" "file2" "-f" "file3"
.for
pętli jest nieco bezcelowe, ponieważ możesz pisaćfor ((i=1; i<=100; i++))
i jest bardziej wydajne.Rozszerzenie nawiasów klamrowych jest bardzo przydatne podczas tworzenia dużych struktur katalogów:
To ci da
Możesz nawet pójść o krok dalej i umieścić rozwinięcie nawiasu klamrowego w rozwinięciu nawiasu:
To da ci taką samą strukturę katalogów jak w powyższym przykładzie.
źródło
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) tak naprawdę nie służy żadnemu celowi. Mogłeś po prostu zrobić to:mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.subdir1
isubdir2
w nie dosłownym sensie. Wymieńsubdir1
sięcat
isubdir2
zedog
np.Używam go, gdy chcę ograniczyć pisanie:
Inny przykład:
źródło
Używam go do porównywania rzeczywistych wyników testowych z pożądanymi wynikami testowymi podczas programowania. Jeśli test nr 41 nie powiedzie się, łatwo zobaczyć, jaka jest różnica między wyjściem testowym (w pliku tests.output / 041) a pożądanym wyjściem (w pliku tests.out / 041):
źródło
Niektóre częste przypadki dla mnie to:
Do zmiany nazwy:
lub
lub
(Chociaż korzystanie z kontroli wersji dla ostatnich 2 zadań jest mniej skomplikowane).
Dla porównania (już wspomniane):
źródło
Jest tu kilka świetnych odpowiedzi, ale żadna z nich nie wspomina, kiedy nie używać rozszerzenia nawiasów klamrowych. Podobnie jak inni odpowiadający, dość często używam nawiasów klamrowych w linii poleceń. Używam go również w moich aliasach i funkcjach, ponieważ mogę oczekiwać inteligentnej powłoki.
Mam nie używać go w moich skryptów powłoki (chyba, że jest jakiś inny powód skrypty powinny być bash lub zsh, choć w tych przypadkach, najlepiej dokonać aktualizacji do „prawdziwego” języka skryptowego jak
perl
lubpython
). Rozszerzenie nawiasów klamrowych nie jest przenośne, ponieważ nie znajduje się w standardzie powłoki POSIX. Nawet jeśli działa w swoim/bin/sh
- shebang skryptów powłoki ed, to nie będzie działać w systemach z więcej pozbawionych/bin/sh
powłoki (npdash
).W przypadku różnicy jednej cyfry nie potrzebujesz rozszerzenia nawiasu; wystarczy klasa postaci:
Bashism:
Przenośny:
źródło
file{1,2}
że zawsze rozwija się dofile1 file2
, podczas gdyfile[12]
rozwija się tylko do istniejących nazw plików: tzn. Jeślifile1
istnieje, alefile2
nie istnieje ,file[12]
rozwija sięfile1
tylko do .[]
Ekspansja jest naprawdę ograniczona wersja?
rozszerzenia (i są one nazywane „ekspansje pathname”).