Xin lưu ý: có nhiều câu hỏi về cách kiểm tra một biến trình bao duy nhất trên trang web này. Câu hỏi này là về việc thử nghiệm một tập lệnh cho bất kỳ biến không xác định nào.Làm cách nào để tôi có thể làm cho bash coi biến không xác định là lỗi?
Bạn có thể sử dụng một biến không xác định trong bash mà không nhìn thấy bất kỳ lỗi tại thực hiện:
#!/bin/bash
echo ${UNDEF_FILE}
ls -l ${UNDEF_FILE}
exit 0
tôi đã tìm thấy lỗi này rất dễ. Nếu tôi muốn thay đổi tên của một biến trong một tập lệnh lớn hoặc xóa biến đó, tất cả các tham chiếu cũ trước đó sẽ gây ra lỗi trong tập lệnh. Đôi khi điều này là không rõ ràng để gỡ lỗi hoặc bạn tìm ra khi nó quá muộn.
Tại sao điều này được phép? Có cách nào để gắn cờ biến không xác định?
"Lý do" quay lại khả năng tương thích với các hệ vỏ thập niên 1970. Nếu bạn quan tâm đến thực hành tốt nhất, trái với lịch sử, kiểm tra tĩnh - như với http://shellcheck.net/, cũng có sẵn để tải xuống [dưới dạng công cụ độc lập] (https://github.com/koalaman)/shellcheck) - là bạn của bạn ở đây. –
Thành thật mà nói, việc mở rộng các biến không xác định sai sẽ phá vỡ nhiều thành ngữ phổ biến. '[[$ var]] & {echo" Làm điều gì đó với $ var "; } ', ví dụ, sẽ phá vỡ với' set -u': Không giống như 'set -e' (chỉ làm cho các lỗi không được kiểm tra hoặc sử dụng như điều kiện thành thất bại),' set -u' làm cho * mọi tham chiếu đến một biến không xác định một lỗi. –
(Nhân tiện - các tên biến toàn bộ nằm trong không gian được xác định bởi POSIX cho các biến môi trường có ý nghĩa với hệ vỏ hoặc hệ điều hành; không gian tên của các biến chứa ít nhất một ký tự chữ thường được dành riêng cho việc sử dụng ứng dụng. cho tất cả các biến shell, chứ không phải chỉ các biến môi trường, trên tài khoản của việc thiết lập một biến shell chia sẻ một tên với một biến môi trường ghi đè lên biến sau). –