ฉันพยายามทำความเข้าใจกับตัวแปรโลคัล / สภาพแวดล้อมและคำสั่งส่งออก / ตั้งค่า
$ set FILEM="razrax"
$ echo $FILEM
$ FILEN="test"
$ echo $FILEN
test
โปรดอธิบายว่าทำไมecho $FILEMส่งคืนสตริงว่าง
ฉันพยายามทำความเข้าใจกับตัวแปรโลคัล / สภาพแวดล้อมและคำสั่งส่งออก / ตั้งค่า
$ set FILEM="razrax"
$ echo $FILEM
$ FILEN="test"
$ echo $FILEN
test
โปรดอธิบายว่าทำไมecho $FILEMส่งคืนสตริงว่าง
คำตอบ:
คุณกำลังสับสนกับbashcsh
ในbashเหมือนในบอร์นเหมือนเปลือกsetเป็นคำสั่งที่จะตั้งค่าตัวเลือก (ตั้งค่าเปลือกเช่น-f, -C, -o noclobber... ) และพารามิเตอร์ตำแหน่ง ( $1, $2... )
set FILEM="razrax"
ชุดที่จะ$1FILEM=razrax
$ set FILEM="razrax"
$ echo "$1"
FILEM=razrax
ไวยากรณ์สำหรับการกำหนดตัวแปรในเชลล์เหมือน Bourne คือ:
VAR=value
(ไม่อนุญาตให้ใช้พื้นที่บนทั้งสองด้าน=)
kshและเชลล์คล้ายบอร์นอื่น ๆ (mksh, pdksh, zsh) สามารถกำหนดตัวแปรอาเรย์ด้วยset:
set -A array value1 value2
zsh, bash, yashและรุ่นใหม่ของkshการใช้งานรูปแบบนี้แทน:
array=(value1 value2)
ในทางตรงกันข้ามในcshหรือtcshไวยากรณ์คือ:
set VAR = value
set array = (value1 value2)
(ช่องว่างรอบ ๆ=ไม่จำเป็น)
ในrc/ esเปลือกหอย:
VAR = value
array = (value1 value2)
(ช่องว่างรอบ ๆ=ไม่จำเป็น)
set -Cตั้งค่า-Cตัวเลือก (เหมือนset -o noclobber) set fooกำหนดfooให้$1(และ$#เป็น 1, ( $2, $3จะไม่ถูกตั้งค่าหากตั้งไว้ก่อนหน้านี้)) ตรวจสอบคู่มือเชลล์ของคุณสำหรับรายละเอียด