Tại sao mở rộng niềng răng không được hỗ trợ?


9

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}.


mkdir {1..10}làm việc cho tôi, nó tạo ra mười thư mục.
suspectus

2
Tôi khuyên bạn nên thêm echo ${SHELL}vào để khiến câu hỏi này có thể có được câu trả lời hữu ích.
dan

Câu trả lời:


10

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 bashksh93.


Chúng ta nên sử dụng loại vỏ shebank nào. / tôi nghi ngờ đó là #!/bin/sh...
Polemon

3
@polemon, Điều đó không nhất thiết phải giúp đỡ. Ví dụ, trên một số hệ thống /bin/shbashhoặc ksh93.
Stéphane Chazelas

2
Tôi thực sự nghĩ rằng nó sẽ: tùy thuộc vào gọi, vỏ gọi là /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.
Polemon

1
@ user43312: tại sao bạn vẫn sử dụng RH9? Nó đã không được biết đến trong nhiều năm. AS Stephane đã viết nó là một tính năng của các phiên bản bash gần đây. Vì vậy, rất khó có khả năng phiên bản bash của bạn hỗ trợ nó. Bạn có thể kiểm tra phiên bản bằng cách sử dụng bash --version. Và chỉ để chắc chắn kiểm tra xem bạn đang chạy bash shell bằng cách kiểm tra biến $ SHELL hoặc chỉ đơn giản là chạy ps. Để sử dụng tính năng này, trước tiên bạn có thể thử khởi động zsh shell ( 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)".
Bram

1
@polemon Hành vi khởi động của shell khác (tức là tệp mà nó cung cấp khi khởi động), không bắt chước shell khác.
Chris Xuống

4

{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


1

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'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.