Mengapa ekspansi brace tidak didukung?


9

Apakah saya harus melakukan konfigurasi untuk memulai ekspansi brace? Ketika saya menjalankan mkdir {1..10}, itu hanya membuat penamaan dir {1..10}.


mkdir {1..10}bekerja untuk saya, itu menciptakan sepuluh dir.
tersangka

2
Saya menyarankan untuk menambahkan echo ${SHELL}membuat pertanyaan ini bisa mendapatkan jawaban yang bermanfaat.
dan

Jawaban:


10

Sementara ekspansi brace seperti {1,2}berasal di cshakhir 70-an, dan menemukan jalan ke shell Bourne-like di bash/ zsh/ pdkshdi akhir 80-an, awal 90-an, {n1..n2}varian datang kemudian pertama zshpada 1995 (2,6-beta4).

bashdisalin pada 2004 (3.0) dan ksh932005 ( ksh93r).

Mungkin shell yang Anda coba ini bukan dari mereka atau versi yang lebih lama dari bashdan ksh93.


Kita harus seperti tentang shell shebank apa yang dia gunakan. / Saya menduga itu #!/bin/sh...
polemon

3
@ Polemon, Itu belum tentu membantu. Misalnya, pada beberapa sistem /bin/shadalah bashatau ksh93.
Stéphane Chazelas

2
Saya benar-benar berpikir itu akan: tergantung pada doa, kerang dipanggil sebagai /bin/sh bertindak sebagai bersejarah sh(itu adalah apa yang dikatakan halaman bash man). Belum memeriksa kshhalaman manual, tapi saya yakin itu akan berperilaku sesuai.
polemon

1
@ user43312: mengapa Anda masih menggunakan RH9? Itu telah dirawat selama bertahun-tahun. AS Stephane menulisnya adalah fitur versi bash terbaru. Jadi, sangat tidak mungkin versi bash Anda mendukungnya. Anda dapat memeriksa versi menggunakan bash --version. Dan hanya untuk memastikan apakah Anda menjalankan bash shell dengan memeriksa variabel $ SHELL atau hanya menjalankan ps. Untuk menggunakan fitur ini, Anda dapat mencoba memulai zsh shell ( zsh) terlebih dahulu. Solusi lain adalah dengan menggunakan sesuatu seperti "mkdir $ (seq 1 10)".
Bram

1
@polemon Perilaku startup dari shell lain (mis. yang mengarsipkannya saat startup), bukan meniru shell lain.
Chris Down

4

{x..y}Ekspansi range brace diimplementasikan dalam bash 3.0-alpha. Untuk membantu kami dan diri Anda sendiri, tolong tunjukkan echo "$BASH_VERSION"hasil Anda .

Maka jawabannya: Jika mkdir {1..10}membuat dir dengan nama {1..10}maka Anda menggunakan versi bash sebelumnya bash 3.0-alpha. Dalam hal ini Anda dapat menggunakan konstruksi for for sebagai:

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


1

Periksa versi Bash Anda:

$ 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>

Juga periksa apakah mkdirbelum alias dengan cara yang aneh:

$ alias |grep mkdir
alias md='mkdir'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.