Tôi muốn đảm bảo rằng tại một điểm nhất định của tập lệnh, sau khi nhập source
tệp cấu hình, một số biến được đặt và nếu không, sẽ dừng thực thi, thông báo cho người dùng về biến bị thiếu. Tôi đã thử
for var in $one $two $three ; do
...
nhưng nếu ví dụ $two
không được đặt, vòng lặp sẽ không bao giờ được thực thi $two
. Điều tiếp theo tôi đã thử là
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
Nhưng nếu hai không được đặt, tôi vẫn nhận được "hai được đặt thành" thay vì "hai không được đặt".
Làm thế nào tôi có thể chắc chắn rằng tất cả các biến cần thiết được đặt?
Cập nhật / Giải pháp: Tôi biết rằng có một sự khác biệt giữa "thiết lập" và "thiết lập, nhưng trống rỗng". Bây giờ tôi sử dụng (nhờ /programming//a/16753536/3456281 và câu trả lời cho câu hỏi này) như sau:
if [ -n "${!var:-}" ] ; then
vì vậy, nếu var
được đặt nhưng trống, nó vẫn được coi là không hợp lệ.
set -u
vào đầu tập lệnh của mình để chấm dứt tập lệnh ngay lập tức khi sử dụng biến không đặt.