<ก่อนหน้านี้ | Contents | ถัดไป>
การกำหนดค่าให้กับตัวแปรและค่าคงที่
นี่คือจุดที่ความรู้ของเราเกี่ยวกับการขยายตัวเริ่มได้ผลจริง ดังที่เราได้เห็น ตัวแปรถูกกำหนดค่าด้วยวิธีนี้:
ตัวแปร=ความคุ้มค่า
ที่ไหน ตัวแปร เป็นชื่อของตัวแปรและ ความคุ้มค่า เป็นสตริง ไม่เหมือนกับภาษาโปรแกรมอื่น ๆ เชลล์ไม่สนใจประเภทของข้อมูลที่กำหนดให้กับตัวแปร มันถือว่าพวกเขาทั้งหมดเป็นสตริง คุณสามารถบังคับให้เชลล์จำกัดการกำหนดให้เป็นจำนวนเต็มได้โดยใช้ ประกาศ สั่งกับ -i ตัวเลือก แต่เช่นเดียวกับการตั้งค่าตัวแปรเป็นแบบอ่านอย่างเดียว วิธีนี้ไม่ค่อยได้ทำ
โปรดทราบว่าในการมอบหมายงาน ต้องไม่มีช่องว่างระหว่างชื่อตัวแปร เครื่องหมายเท่ากับ และค่า แล้วค่าสามารถประกอบด้วยอะไร? อะไรก็ตามที่เราสามารถขยายเป็นสตริงได้:
ก=ซ
b="สตริง"
c="a สตริงและ $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta string\n"
# กำหนดสตริง "z" ให้กับตัวแปร a
# ช่องว่างภายในต้องอยู่ภายในเครื่องหมายคำพูด
# การขยายอื่น ๆ เช่นตัวแปรสามารถ
#ขยายไปสู่งาน
#ผลลัพธ์ของคำสั่ง
# การขยายเลขคณิต
# ลำดับ Escape เช่นแท็บและการขึ้นบรรทัดใหม่
ก=ซ
b="สตริง"
c="a สตริงและ $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta string\n"
การกำหนดตัวแปรหลายตัวสามารถทำได้ในบรรทัดเดียว:
a=5 b="สตริง"
a=5 b="สตริง"
ในระหว่างการขยาย ชื่อตัวแปรอาจถูกล้อมรอบด้วยวงเล็บปีกกาเสริม “{}” สิ่งนี้มีประโยชน์ในกรณีที่ชื่อตัวแปรมีความคลุมเครือเนื่องจากปัจจัยแวดล้อม
ข้อความ. ที่นี่เราพยายามเปลี่ยนชื่อไฟล์จาก ไฟล์ของฉัน ไปยัง ไฟล์ของฉัน1โดยใช้ตัวแปร:
[me@linuxbox ~]$ ชื่อไฟล์ = "myfile" [me@linuxbox ~]$ แตะ $filename [me@linuxbox ~]$ mv $ชื่อไฟล์ $filename1
mv: ไฟล์ปลายทางที่หายไปหลังจาก `myfile' ลอง `mv --help' สำหรับข้อมูลเพิ่มเติม
[me@linuxbox ~]$ ชื่อไฟล์ = "myfile" [me@linuxbox ~]$ แตะ $filename [me@linuxbox ~]$ mv $ชื่อไฟล์ $filename1
mv: ไฟล์ปลายทางที่หายไปหลังจาก `myfile' ลอง `mv --help' สำหรับข้อมูลเพิ่มเติม
ความพยายามนี้ล้มเหลวเนื่องจากเชลล์ตีความอาร์กิวเมนต์ที่สองของ mv คำสั่งเป็นตัวแปรใหม่ (และว่างเปล่า) ปัญหาสามารถแก้ไขได้ด้วยวิธีนี้:
[me@linuxbox ~]$ mv $ชื่อไฟล์ ${filename}1
[me@linuxbox ~]$ mv $ชื่อไฟล์ ${filename}1
โดยการเพิ่มเหล็กจัดฟันรอบๆ เปลือกจะไม่ตีความส่วนท้ายอีกต่อไป 1 เป็นส่วนหนึ่งของชื่อตัวแปร
เราจะใช้โอกาสนี้ในการเพิ่มข้อมูลบางส่วนลงในรายงานของเรา กล่าวคือ วันที่และเวลาที่สร้างรายงานและชื่อผู้ใช้ของผู้สร้าง:
#! / bin / ทุบตี
# โปรแกรมที่จะส่งออกหน้าข้อมูลระบบ TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(วันที่ +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
เสียงสะท้อน "
$TITLE
$TITLE
$TIMESTAMP
"
#! / bin / ทุบตี
# โปรแกรมที่จะส่งออกหน้าข้อมูลระบบ TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME=$(วันที่ +"%x %r %Z")
TIMESTAMP="สร้าง $CURRENT_TIME โดย $USER"
เสียงสะท้อน "
$TITLE
$TITLE
$TIMESTAMP
"