ไม่มีประโยชน์ในการกำหนดสตริงว่างให้กับตัวแปรจากนั้นกำหนดสตริงตัวแปรอื่นให้กับตัวแปรทันที การกำหนดค่าให้กับตัวแปรเชลล์จะเขียนทับค่าก่อนหน้าอย่างสมบูรณ์
มีความรู้ของฉันไม่มีคำแนะนำที่บอกว่าคุณควรเริ่มต้นตัวแปรอย่างชัดเจนเพื่อสตริงว่าง ในความเป็นจริงการทำเช่นนั้นอาจปกปิดข้อผิดพลาดในบางสถานการณ์ (ข้อผิดพลาดที่อาจเห็นได้ชัดหากทำงานภายใต้set -u
ดูด้านล่าง)
ตัวแปร unset ที่ไม่ได้ใช้ตั้งแต่เริ่มต้นสคริปต์หรือยกเลิกการตั้งค่าอย่างชัดเจนโดยการเรียกใช้unset
คำสั่งนั้นจะไม่มีค่า ค่าของตัวแปรดังกล่าวจะไม่มีค่าอะไรเลย หากใช้เป็น"$myvariable"
คุณจะได้รับเทียบเท่า""
และคุณจะไม่ได้รับ "ข้อมูลขยะ"
หากnounset
ตั้งค่าตัวเลือก shell ด้วยset -o nounset
หรือset -u
การอ้างอิงตัวแปร unset จะทำให้เชลล์สร้างข้อผิดพลาด (และเชลล์ที่ไม่มีการโต้ตอบจะสิ้นสุดลง):
$ set -u
$ echo "$myvariable"
/bin/sh: myvariable: parameter not set
หรือในbash
:
$ set -u
$ echo "$myvariable"
bash: myvariable: unbound variable
ตัวแปรเชลล์จะถูกเตรียมใช้งานโดยสภาพแวดล้อมหากชื่อของตัวแปรสอดคล้องกับตัวแปรสภาพแวดล้อมที่มีอยู่
หากคุณคาดหวังว่าคุณกำลังใช้ตัวแปรที่อาจเริ่มต้นสภาพแวดล้อมด้วยวิธีนี้ (และหากไม่ต้องการ) คุณอาจยกเลิกการตั้งค่าอย่างชัดเจนก่อนส่วนหลักของสคริปต์ของคุณ:
unset myvariable # unset so that it doesn't inherit a value from the environment
ซึ่งจะลบมันออกเป็นตัวแปรสภาพแวดล้อมหรือคุณอาจเพิกเฉยต่อค่าเริ่มต้นและเพียงแค่เขียนทับมันด้วยการกำหนด (ซึ่งจะทำให้ค่าการเปลี่ยนแปลงตัวแปรสภาพแวดล้อมเกินไป)
คุณจะไม่พบกับขยะที่ไม่ได้กำหนดค่าเริ่มต้นในตัวแปรเชลล์ (เว้นแต่จะมีการระบุไว้ว่าขยะนั้นมีอยู่แล้วในตัวแปรสภาพแวดล้อมด้วยชื่อเดียวกัน)