Destek genişletmesi neden desteklenmiyor?


9

Destek genişletmeyi başlatmak için herhangi bir yapılandırma yapmam gerekir mi? Koştuğumda mkdir {1..10}, sadece bir dir adlandırma oluşturur {1..10}.


mkdir {1..10}benim için çalışıyor, on dir.
13:44

2
echo ${SHELL}Bu soruyu faydalı bir yanıt alabilmek için eklemenizi tavsiye ederim .
dan

Yanıtlar:


11

Ayracı gibi genişleme iken {1,2}de menşeli csh70'lerin ve yolunda bulundu Bourne benzeri içinde kabuklar bash/ zsh/ pdksh80'lerin, 90'ların başında, {n1..n2}varyant daha sonra birinci geldi zsh1995 (2.6-beta4).

bash2004'te (3.0) ve ksh932005'te ( ksh93r) kopyaladı .

Muhtemelen bu in çalışıyoruz kabuk ne olanların veya daha eski bir sürümü bashve ksh93.


Ne tür bir Shebank mermisi kullandığı hakkında olmalıyız. / me şüpheli olduğunu #!/bin/sh...
polemon

3
@polemon, Bu her zaman yardımcı olmaz. Örneğin, bazı sistemlerde /bin/sholduğu bashveya ksh93.
Stéphane Chazelas

2
Aslında öyle olacağını düşünüyorum: istilaya bağlı olarak, tarihi gibi /bin/sh davranan kabuklar sh(bash man sayfasının zaten söylediği şey budur). ksh'Nin adam sayfasını kontrol etmedim, ama eminim buna göre davranacak.
polemon

1
@ user43312: Neden hala RH9 kullanıyorsunuz? Uzun yıllardır bakımsızdır. Stephane yazdığı gibi son bash sürümlerinin bir özelliği. Bu yüzden bash sürümünüzün bunu desteklemesi pek olası değildir. Bash --version'ı kullanarak sürümü kontrol edebilirsiniz. Ve sadece $ SHELL değişkenini kontrol ederek veya sadece ps çalıştırarak bir bash kabuğu çalıştırıp çalıştırmadığınızı kontrol edin. Bu özelliği kullanmak için zshönce bir zsh kabuğu ( ) başlatmayı deneyebilirsiniz . Başka bir çözüm "mkdir $ (seq 1 10)" gibi bir şey kullanmak olacaktır.
Bram

1
@polemon Başka bir kabuğun taklit edilmesi değil, başka bir kabuğun başlatma davranışı ( başlangıçta kaynaklandığı dosyaları).
Chris Down

4

{x..y}Aralık küme genişletmesi bash 3.0-alfa'da uygulanır. Bize ve kendinize yardımcı olmak için lütfen echo "$BASH_VERSION"çıktılarınızı gösterin .

Sonra cevap: Eğer mkdir {1..10}ismiyle bir dir oluşturursa, {1..10}daha önce bash versiyonunu kullanıyorsunuz demektir bash 3.0-alpha. Bu durumda bir for döngüsü yapısını şu şekilde kullanabilirsiniz:

for ((i=1;i<=10; i++)); do mkdir "$i"; done


1

Bash sürümünüzü kontrol edin:

$ bash -version
GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

Ayrıca mkdir, garip bir şekilde takma ad olmadığını kontrol edin :

$ alias |grep mkdir
alias md='mkdir'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.