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 sourcetệ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ụ $twokhô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 -uvà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.