Yanıtlar:
Bu sadece "bilmek istiyorum" sorusu mu yoksa bunun gerçek bir kullanım durumu var mı? Bunu yapmak için bazı jimnastik yapabiliriz:
$ eval echo\ {a,b,c}\;
a
b
c
Ancak bu tür gizemli komutları sistem komut dosyalarımıza koyan herkesi avlardım.
Bunun yerine neden açıklığa kavuşmuyorsunuz?
$ for X in {a,b,c}; do echo $X; done
Hatta bütün domuzlara gidip birkaç yeni satır ekleyebilir ve biraz girintili hale getirebilirsiniz, böylece ne yapmaya çalıştığınızı her zaman anlayabilirsiniz.
for
çalışıyor, ama yine de daha fazla
eval git branch -d \{ branch-a, branch-b }\;
Mark Mann'ın seçtiği cevaba dayanarak, harika çalışan bu örneği daha da türetebildim:
$ eval echo\ category_{17,32,33}.properties\{,.bak\}\;
category_17.properties category_17.properties.bak
category_32.properties category_32.properties.bak
category_33.properties category_33.properties.bak
Gösteren şey, bir satırda birden çok küme ayracı genişlemesi kullandığınızda, Mark'ın orijinal örneği her varyasyonu ayrı ayrı yazdırırdı. Bunun yerine, cevabını birden fazla dosyayı taşımak / yeniden adlandırmak için kullanmak istedim. Çıktının mv
normalde ( mv oldfilename newfilename
) beklediği formatla eşleştiğinden emin olmak için , ikinci küme ayracı genişletme oluşumundan kaçtım, böylece ilk komut yürütüldükten sonraya kadar değerlendirilmeyecekti eval
.
Yukarıdaki çıktı beklendiği gibi göründüğünden, aşağıdaki komutu çalıştırabildim:
$ eval mv\ category_{17,32,33}.properties\{,.bak\}\;
$ ls
category_17.properties.bak category_32.properties.bak category_33.properties.bak
Mark'a orijinal cevabı için çok teşekkürler. Cevabını yapmama izin verdiğini beğenirseniz lütfen cevabını yukarı oylayın :-)
file-{r,b,g}{m,n,o}{x,y.z}.foo
, kısa formu kullanmak 27 değerin hepsini saymaktan daha iyidir.