ฉันจะเชื่อมตัวแปรเชลล์เข้ากับพารามิเตอร์อื่น ๆ ในบรรทัดคำสั่งของฉันได้อย่างไร
ตัวอย่างเช่น,
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql
ฉันต้องเชื่อมต่อ.sql
กับ$WEBSITE
ฉันจะเชื่อมตัวแปรเชลล์เข้ากับพารามิเตอร์อื่น ๆ ในบรรทัดคำสั่งของฉันได้อย่างไร
ตัวอย่างเช่น,
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql
ฉันต้องเชื่อมต่อ.sql
กับ$WEBSITE
คำตอบ:
ใช้${ }
เพื่อล้อมรอบตัวแปร
โดยไม่ต้องวงเล็บปีกกา:
VAR="foo"
echo $VAR
echo $VARbar
จะให้
foo
และไม่มีอะไรเพราะ$VARbar
ไม่มีตัวแปร
ด้วยวงเล็บปีกกา:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
จะให้
foo
foobar
การปิดล้อมครั้งแรก$VAR
นั้นไม่จำเป็น แต่เป็นการฝึกฝนที่ดี
สำหรับตัวอย่างของคุณ:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
งานนี้สำหรับbash
, zsh
, ksh
บางทีคนอื่นมากเกินไป
${ }
ไม่ได้ต่อกันในแง่ใด ตัวอย่างเช่นELP=elp && echo $ELP && man --h${EPL}
ไม่ทำงาน
เพียงต่อเนื้อหาตัวแปรเข้ากับสิ่งอื่นที่คุณต้องการเชื่อมต่อเช่น
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
การเสนอราคาสองครั้งไม่เกี่ยวข้องกับการต่อข้อมูล: ที่นี่>$WEBSITE.sql
ก็ใช้ได้เหมือนกัน พวกเขาต้องการรอบการขยายตัวของตัวแปรเมื่อค่าของตัวแปรอาจมีอักขระพิเศษของเชลล์บางตัว (ช่องว่างและ\[?*
) ฉันขอแนะนำให้ใส่อัญประกาศล้อมรอบการขยายตัวแปรและการแทนที่คำสั่งทั้งหมดเช่นเขียน"$WEBSITE"
และ"$(mycommand)"
เสมอ
สำหรับรายละเอียดเพิ่มเติมโปรดดูที่$ VAR VS $ {} VAR และจะพูดหรือไม่ที่จะอ้าง
echo "$WEBSITE.sql"
ผมมักจะใช้คำพูดเช่น
ดังนั้นคุณสามารถเขียนได้เช่น:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
ไม่ใช่อักขระที่ถูกต้องในชื่อตัวแปร ดูคำตอบของ wagถ้าคุณต้องการเชื่อมสตริงที่เริ่มต้นด้วยอักขระที่ถูกต้อง (เช่น "$ WEBSITEsql" จะไม่ทำงาน)