Apakah saya harus melakukan konfigurasi untuk memulai ekspansi brace? Ketika saya menjalankan mkdir {1..10}
, itu hanya membuat penamaan dir {1..10}
.
echo ${SHELL}
membuat pertanyaan ini bisa mendapatkan jawaban yang bermanfaat.
Apakah saya harus melakukan konfigurasi untuk memulai ekspansi brace? Ketika saya menjalankan mkdir {1..10}
, itu hanya membuat penamaan dir {1..10}
.
echo ${SHELL}
membuat pertanyaan ini bisa mendapatkan jawaban yang bermanfaat.
Jawaban:
Sementara ekspansi brace seperti {1,2}
berasal di csh
akhir 70-an, dan menemukan jalan ke shell Bourne-like di bash
/ zsh
/ pdksh
di akhir 80-an, awal 90-an, {n1..n2}
varian datang kemudian pertama zsh
pada 1995 (2,6-beta4).
bash
disalin pada 2004 (3.0) dan ksh93
2005 ( ksh93r
).
Mungkin shell yang Anda coba ini bukan dari mereka atau versi yang lebih lama dari bash
dan ksh93
.
#!/bin/sh
...
/bin/sh
adalah bash
atau ksh93
.
/bin/sh
bertindak sebagai bersejarah sh
(itu adalah apa yang dikatakan halaman bash man). Belum memeriksa ksh
halaman manual, tapi saya yakin itu akan berperilaku sesuai.
zsh
) terlebih dahulu. Solusi lain adalah dengan menggunakan sesuatu seperti "mkdir $ (seq 1 10)".
{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
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 mkdir
belum alias dengan cara yang aneh:
$ alias |grep mkdir
alias md='mkdir'
mkdir {1..10}
bekerja untuk saya, itu menciptakan sepuluh dir.