Ben ne olduğunu anlamak bağ genişleme , ama nasıl kullanılacağını iyi bilmiyorum.
Ne zaman kullanıyorsun?
Kendi ipucunuz varsa lütfen bana bazı uygun ve dikkat çekici örnekler verin.
Ben ne olduğunu anlamak bağ genişleme , ama nasıl kullanılacağını iyi bilmiyorum.
Ne zaman kullanıyorsun?
Kendi ipucunuz varsa lütfen bana bazı uygun ve dikkat çekici örnekler verin.
Yanıtlar:
Uzun yol adlarınız varsa küme ayracı genişletme işlemi çok yararlıdır. Bir dosyayı yedeklemek için hızlı bir yol olarak kullanıyorum :
cp /a/really/long/path/to/some/file.txt{,.bak}
kopyalar /a/really/long/path/to/some/file.txt
için/a/really/long/path/to/some/file.txt.bak
Ayrıca bir sırayla kullanabilirsiniz . Bir keresinde web’ten çok fazla sayfa indirmek için yaptım:
wget http://domain.com/book/page{1..5}.html
veya
for i in {1..100}
do
#do something 100 times
done
program
üç kelime alır: "-f file1" "-f file2" "-f file3"
6 yerine "-f" "file1" "-f" "file2" "-f" "file3"
.
for
döngüde kullanım için genişletmeyi kullanmak biraz anlamsızdır, çünkü yazabilirsiniz for ((i=1; i<=100; i++))
ve daha verimlidir.
Büyük dizin yapıları oluştururken ayraç genişletme çok kullanışlı olur:
mkdir -p dir1/{subdir1,subdir2}/{subsubdir1,subsubdir2}
Bu sana verecek
find dir1 -type d
dir1
dir1/subdir1
dir1/subdir1/subsubdir1
dir1/subdir1/subsubdir2
dir1/subdir2
dir1/subdir2/subsubdir1
dir1/subdir2/subsubdir2
Hatta bir adım daha ileri gidip brace genişlemesini brace genişlemeye koyabilirsiniz:
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
Bu size yukarıdaki örnekle aynı dizin yapısını verecektir.
mkdir -p dir1/{subdir{1,2}}/{subsubdir{1,2}}
) aslında herhangi bir amaca hizmet etmiyor. Sadece bu yapmış olabilir: mkdir -p dir1/subdir{1,2}/subsubdir{1,2}
.
subdir1
ve subdir2
olmayan gerçek anlamda. Değiştir subdir1
ile cat
ve subdir2
ile dog
örneğin.
Geliştirme sırasında gerçek test çıktısını istenen test çıktısıyla karşılaştırmak için kullanıyorum. Test # 41 başarısız olursa, test çıkışı (tests.output / 041 dosyasında) ve istenen çıktı (tests.out / 041 dosyasında) arasındaki farkın ne olduğunu görmek kolaydır:
$ diff tests.{out,output}/041
Benim için sık kullanılan bazı durumlar:
Yeniden adlandırmak için:
mv myText.{txt,tex}
veya
mv myText.tex{,.old}
veya
cp myText.tex{,.backup}
(Son 2 görev için sürüm denetimi kullanmak daha az karmaşık olmasına rağmen.)
Karşılaştırma için (daha önce bahsedilen):
diff path{1,2}/a.txt
Orada birkaç büyük cevaplar burada, ama ne zaman bunların hiçbiri söz değil ayracı genişlemesini kullanmak. Diğer cevaplayıcılar gibi ben de komut satırında ayraç genişlemesi kullanıyorum. Akıllı bir kabuk bekleyebileceğimden, takma ve fonksiyonlarımda da kullanıyorum.
Ben do not (bu durumlarda, bu gibi bir "gerçek" komut dosyası dili yükseltmek için en iyisi olsa da, komut bash veya zsh olmalıdır başka sebepler olmadıkça benim kabuk komut kullanmak perl
veya python
). Parantez genişlemesi POSIX kabuk standardında olmadığı için taşınabilir değildir. Sizin çalışır bile /bin/sh
- shebang ed kabuk komut, daha elimden sistemlerde çalışmaz /bin/sh
kabukları (örn dash
).
Tek basamaklı bir fark olması durumunda, ayraç genişlemesi gerekmez; bir karakter sınıfı yeterli olacaktır:
Bashism:
diff file{1,2}
Taşınabilir:
diff file[12]
file{1,2}
her zaman genişleyecek file1 file2
olurken, file[12]
genişletir sadece mevcut dosya için: yani eğer file1
mevcutsa ama file2
olmuyorsa file[12]
şekilde genişler file1
sadece. []
Genişleme gerçekten bir kısıtlı versiyonu ?
genişleme (ve onlar "yol adı açılımları" denir).
program -f file1 -f file2 -f file3
yapabilirsinizprogram "-f file"{1..3}