Czy muszę wykonać konfigurację, aby rozpocząć rozszerzanie nawiasów? Kiedy uruchamiam mkdir {1..10}
, po prostu tworzy nazwę katalogu {1..10}
.
echo ${SHELL}
aby to pytanie było w stanie uzyskać przydatną odpowiedź.
Czy muszę wykonać konfigurację, aby rozpocząć rozszerzanie nawiasów? Kiedy uruchamiam mkdir {1..10}
, po prostu tworzy nazwę katalogu {1..10}
.
echo ${SHELL}
aby to pytanie było w stanie uzyskać przydatną odpowiedź.
Odpowiedzi:
Podczas gdy ekspansja nawiasów klamrowych {1,2}
pochodzi csh
z późnych lat 70. i trafiła do podobnych do Bourne'a pocisków w bash
/ zsh
/ pdksh
pod koniec lat 80., na początku lat 90., {n1..n2}
wariant pojawił się później zsh
w 1995 r. (2.6-beta4).
bash
skopiowałem go w 2004 r. (3.0) i ksh93
w 2005 r. ( ksh93r
).
Prawdopodobnie powłoka, w której próbujesz tego użyć, nie jest żadną z nich lub jest starszą wersją bash
i ksh93
.
#!/bin/sh
...
/bin/sh
jest bash
lub ksh93
.
/bin/sh
działają jako historyczne sh
(tak zresztą mówi strona podręcznika bash). Nie sprawdziłem ksh
strony podręcznika użytkownika, ale jestem pewien, że będzie się odpowiednio zachowywać.
zsh
). Innym obejściem byłoby użycie czegoś takiego jak „mkdir $ (seq 1 10)”.
{x..y}
Rozszerzenie zakresu nawiasów jest zaimplementowane w bash 3.0-alpha. Aby pomóc nam i sobie, pokaż swoje echo "$BASH_VERSION"
wyniki.
Następnie odpowiedź: Jeśli mkdir {1..10}
tworzy katalog z nazwą {1..10}
, to wcześniej używasz wersji bash bash 3.0-alpha
. W takim przypadku można użyć konstrukcji pętli for:
for ((i=1;i<=10; i++)); do mkdir "$i"; done
Sprawdź swoją wersję Bash:
$ 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>
Sprawdź również, czy mkdir
nie były to aliasy w jakiś dziwny sposób:
$ alias |grep mkdir
alias md='mkdir'
mkdir {1..10}
działa dla mnie, tworzy dziesięć reż.