Tôi có phải thực hiện bất kỳ cấu hình nào để bắt đầu mở rộng cú đúp không? Khi tôi chạy mkdir {1..10}
, nó chỉ tạo ra một tên đặt tên {1..10}
.
echo ${SHELL}
vào để khiến câu hỏi này có thể có được câu trả lời hữu ích.
Tôi có phải thực hiện bất kỳ cấu hình nào để bắt đầu mở rộng cú đúp không? Khi tôi chạy mkdir {1..10}
, nó chỉ tạo ra một tên đặt tên {1..10}
.
echo ${SHELL}
vào để khiến câu hỏi này có thể có được câu trả lời hữu ích.
Câu trả lời:
Trong khi mở rộng cú đúp như {1,2}
bắt nguồn ở csh
trong cuối những năm 70, và tìm thấy đường tới vỏ Bourne giống như trong bash
/ zsh
/ pdksh
vào cuối những năm 80, đầu những năm 90, các {n1..n2}
biến thể xuất hiện sau này đầu tiên trong zsh
năm 1995 (2,6-beta4).
bash
sao chép nó vào năm 2004 (3.0) và ksh93
năm 2005 ( ksh93r
).
Có lẽ cái vỏ bạn đang thử này không phải là cái nào hoặc là phiên bản cũ hơn bash
và ksh93
.
#!/bin/sh
...
/bin/sh
là bash
hoặc ksh93
.
/bin/sh
hành động như các di tích lịch sử sh
(đó là những gì các trang man bash nói anyway). Không kiểm tra ksh
trang của người đàn ông, nhưng tôi chắc chắn nó sẽ hoạt động tương ứng.
zsh
). Cách giải quyết khác của Anothher sẽ là sử dụng cái gì đó như "mkdir $ (seq 1 10)".
{x..y}
Mở rộng phạm vi niềng răng được thực hiện trong bash 3.0-alpha. Để giúp chúng tôi và chính bạn, xin vui lòng hiển thị echo "$BASH_VERSION"
đầu ra của bạn .
Sau đó, câu trả lời: Nếu mkdir {1..10}
tạo một thư mục có tên {1..10}
thì bạn đang sử dụng phiên bản bash trước đó bash 3.0-alpha
. Trong trường hợp đó, bạn có thể sử dụng cấu trúc vòng lặp như:
for ((i=1;i<=10; i++)); do mkdir "$i"; done
Kiểm tra phiên bản Bash của bạn:
$ 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>
Ngoài ra, hãy kiểm tra xem đó mkdir
không phải là bí danh theo một cách kỳ lạ:
$ alias |grep mkdir
alias md='mkdir'
mkdir {1..10}
làm việc cho tôi, nó tạo ra mười thư mục.