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 ở cshtrong cuối những năm 70, và tìm thấy đường tới vỏ Bourne giống như trong bash/ zsh/ pdkshvà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 zshnăm 1995 (2,6-beta4).
bashsao chép nó vào năm 2004 (3.0) và ksh93nă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 bashvà ksh93.
#!/bin/sh...
/bin/shlà bashhoặ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 kshtrang 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 đó mkdirkhô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.