การกำหนดตัวแปรมีรูปแบบของชื่อตัวแปรตามด้วยเครื่องหมายเท่ากับแล้วตามด้วยค่า (ทางเลือก)
นี่คือการมอบหมายที่ถูกต้อง:
ABC=123
"$x"1=1
ไม่ใช่การมอบหมายที่ถูกต้องเพราะ"$x"1
ไม่ใช่ชื่อตัวแปร มันอาจจะเป็นEVAL uated เป็นชื่อตัวแปร แต่มันไม่ได้ ที่จริงแล้วเชลล์เชื่อว่าเป็นคำสั่ง
วิธีหนึ่งในการทำสิ่งที่คุณต้องการบรรลุคือ:
eval "$x"1=1
อีกวิธีหนึ่งในการทุบตี (แต่ไม่ใช่ในเปลือกหอยอื่น) คือ:
declare "$x"1=1
หรือยัง (อีกครั้งทุบตีเท่านั้น):
let "$x"1=1
(ในกรณีของคุณไม่มีความแตกต่างกันมาก)
แต่อย่างที่Jakujeตั้งข้อสังเกตในความคิดเห็นคุณอาจต้องการไปกับอาร์เรย์ถ้าเชลล์ของคุณมี (ksh, bash หรือ zsh)
เพื่อความสมบูรณ์:
eval
รันคำสั่งโดยพลการ ดังนั้นหากทางด้านขวาของเครื่องหมายเท่ากับคุณมีตัวแปรที่ขยายไปยังคำสั่งบางคำสั่งนั้นจะถูกดำเนินการ รหัสต่อไปนี้:
x=a
y='$(echo hello)'
eval "$x=$y"
a=hello
เทียบเท่ากับ
declare
เป็น bash ในตัวเพื่อกำหนดตัวแปรและจะไม่รันคำสั่งใด ๆ รหัสต่อไปนี้:
x=a
y='$(echo hello)'
declare "$x=$y"
a='$(echo hello)'
เทียบเท่ากับ
let
คล้ายกับdeclare
ที่ไม่ได้ใช้คำสั่ง แต่ขัดกับdeclare
, let
อาจจะใช้สำหรับดำเนินการทางคณิตศาสตร์:
let a="1 + 2"
a=3
เทียบเท่ากับ