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 mvnormalde ( 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.