Không có lợi khi gán một chuỗi rỗng cho một biến và sau đó ngay lập tức gán một chuỗi biến khác cho nó. Việc gán giá trị cho biến shell sẽ ghi đè hoàn toàn giá trị trước đó.
Theo hiểu biết của tôi, không có khuyến nghị nào nói rằng bạn nên khởi tạo rõ ràng các biến thành các chuỗi trống. Trong thực tế, làm như vậy có thể che dấu lỗi trong một số trường hợp (lỗi có thể rõ ràng hơn nếu chạy bên dưới set -u
, xem bên dưới).
Một biến unset, không được sử dụng kể từ khi bắt đầu tập lệnh hoặc không được đặt rõ ràng bằng cách chạy unset
lệnh trên nó, sẽ không có giá trị. Giá trị của một biến như vậy sẽ không có gì. Nếu được sử dụng như "$myvariable"
, bạn sẽ nhận được tương đương ""
và bạn sẽ không bao giờ nhận được "dữ liệu rác".
Nếu tùy chọn vỏ nounset
được thiết lập với một trong hai set -o nounset
hoặc set -u
, sau đó tham khảo một biến unset sẽ gây ra vỏ để tạo ra một lỗi (và một vỏ không tương tác sẽ chấm dứt):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
hoặc, trong bash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
Các biến Shell sẽ được khởi tạo bởi môi trường nếu tên của biến tương ứng với một biến môi trường hiện có.
Nếu bạn mong đợi rằng bạn đang sử dụng một biến có thể được khởi tạo bởi môi trường theo cách này (và nếu không mong muốn), thì bạn có thể bỏ đặt nó một cách rõ ràng trước phần chính của tập lệnh của bạn:
unset myvariable # unset so that it doesn't inherit a value from the environment
cái này cũng sẽ loại bỏ nó như một biến môi trường, hoặc, bạn có thể đơn giản bỏ qua giá trị ban đầu của nó và chỉ ghi đè lên nó bằng một phép gán (điều này cũng làm cho biến môi trường thay đổi giá trị).
Bạn sẽ không bao giờ gặp phải rác chưa được khởi tạo trong một biến shell (trừ khi, như đã nêu, rác đó đã tồn tại trong một biến môi trường có cùng tên).