ฉันต้องการตรวจสอบให้แน่ใจว่า ณ จุดหนึ่งของสคริปต์หลังจากsource
การตั้งค่าไฟล์ตัวแปรหลายตัวจะถูกตั้งค่าและหากไม่ใช่เพื่อหยุดการประมวลผลให้บอกผู้ใช้เกี่ยวกับตัวแปรที่หายไป ฉันเหนื่อย
for var in $one $two $three ; do
...
แต่ถ้ายกตัวอย่างเช่นไม่ได้ตั้งวงไม่เคยประหารชีวิต$two
$two
สิ่งต่อไปที่ฉันลองคือ
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
แต่ถ้าทั้งสองไม่ได้ตั้งค่าฉันยังคงได้รับ "two ถูกตั้งค่าเป็น" แทนที่จะเป็น "two is not set"
ฉันจะแน่ใจได้อย่างไรว่าตัวแปรที่จำเป็นทั้งหมดถูกตั้งค่า
Update / Solution:ฉันรู้ว่ามีความแตกต่างระหว่าง "set" และ "set, but empty" ตอนนี้ฉันใช้ (ขอบคุณ/programming//a/16753536/3456281และคำตอบสำหรับคำถามนี้) ต่อไปนี้:
if [ -n "${!var:-}" ] ; then
ดังนั้นหากvar
ตั้งค่าไว้ แต่ว่างเปล่าก็ถือว่ายังไม่ถูกต้อง
set -u
ไปยังจุดเริ่มต้นของสคริปต์เพื่อยกเลิกทันทีเมื่อใช้ตัวแปร unset