Hãy tưởng tượng rằng trên máy chủ của tôi, tôi có các tập tin sau đây:Bash kịch bản và regex vấn đề
[email protected]:/var/log/foo$ ls
fooFile1 fooFile2 logFile logFile.1 logFile.2
Tôi muốn tạo ra một kho lưu trữ có chứa tất cả các tập tin nhưng logfile *.. Vì vậy, tôi đã đưa ra lệnh:
[email protected]:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)
Và nó hoạt động tốt! Tuy nhiên, khi cố gắng để tạo ra một kịch bản mà không được công việc như nhau:
#!/bin/bash
tar -czf foo.tar.gz /var/log/foo/!(logFile.*)
Tôi đã xem qua các lỗi sau:
./test.sh: line 3: syntax error near unexpected token '('
./test.sh: line 3: 'tar -czf foo.tar.gz /var/log/foo/!(logFile.*)'
Vấn đề không tar liên quan (Tôi đã gặp vấn đề tương tự sử dụng ls
thay của tar
)
Tôi không hiểu lỗi này đến từ đâu. Bất cứ ai có thể cho tôi biết nơi tôi sai?
Met trên Ubuntu 12.04
Đó là giá trị chỉ ra một cách rõ ràng rằng tùy chọn này được kích hoạt theo mặc định trong một vỏ tương tác, đó là nguyên nhân của sự khác biệt trong hành vi. –
Tôi sẽ cần phải tìm hiểu thêm về nó. Cám ơn hai bạn ! –