Có nguy hiểm không khi luôn có extglob?


7

Nếu tôi bật extglobđể làm những việc như

shopt -s extglob
rm !(*.html|*.txt) # remove everything except html and txt files

Có phải là không khôn ngoan để tiếp tục extglobsau này? Có bất kỳ cảnh báo về việc có nó trên tất cả các thời gian?


Câu trả lời trùng lặp trên stackoverflow: stackoverflow.com/questions/17191622
PetaspeedBeaver

Câu trả lời:


13

Không, nó không nguy hiểm. Các extglobtùy chọn không làm tăng nguy cơ vô tình gây thiệt hại. Lý do duy nhất mà nó không được bật theo mặc định là vì khả năng tương thích ngược với các phiên bản bash trước đó và thậm chí sau đó, các trường hợp phá vỡ tính tương thích là khá xa, bởi vì hầu hết những gì extglobcho phép là lỗi cú pháp nếu không được đặt do dấu ngoặc đơn mở xảy ra trong một từ.

$ bash -c $'echo /@(u|v)*' 
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `echo /@(u|v)*'
$ bash -c $'shopt -s extglob\necho /@(u|v)*'
/usr /var

Trường hợp duy nhất tôi có thể nghĩ về nơi nó phá vỡ tính tương thích với bash -without-extglob và POSIX sh là khi một mẫu được mở rộng từ một biến. Các mẫu extglob là không bình thường trong tên tệp, vì vậy điều này không có khả năng là một vấn đề trong thực tế.

 $ bash -c $'shopt -s extglob\necho $0' '/@(u|v)*'
/usr /var
$ bash -c $'echo $0' '/@(u|v)*'
/@(u|v)*

Sự không tương thích đủ lành tính để ksh có các mẫu này được bật theo mặc định và các phiên bản bash gần đây có thể được biên dịch với tùy chọn bật theo mặc định ( ./configure --enable-extended-glob-default).

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.