ฉันพยายามทำความเข้าใจกับตัวแปรโลคัล / สภาพแวดล้อมและคำสั่งส่งออก / ตั้งค่า
$ set FILEM="razrax"
$ echo $FILEM
$ FILEN="test"
$ echo $FILEN
test
โปรดอธิบายว่าทำไมecho $FILEM
ส่งคืนสตริงว่าง
ฉันพยายามทำความเข้าใจกับตัวแปรโลคัล / สภาพแวดล้อมและคำสั่งส่งออก / ตั้งค่า
$ set FILEM="razrax"
$ echo $FILEM
$ FILEN="test"
$ echo $FILEN
test
โปรดอธิบายว่าทำไมecho $FILEM
ส่งคืนสตริงว่าง
คำตอบ:
คุณกำลังสับสนกับbash
csh
ในbash
เหมือนในบอร์นเหมือนเปลือกset
เป็นคำสั่งที่จะตั้งค่าตัวเลือก (ตั้งค่าเปลือกเช่น-f
, -C
, -o noclobber
... ) และพารามิเตอร์ตำแหน่ง ( $1
, $2
... )
set FILEM="razrax"
ชุดที่จะ$1
FILEM=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
จะไม่ถูกตั้งค่าหากตั้งไว้ก่อนหน้านี้)) ตรวจสอบคู่มือเชลล์ของคุณสำหรับรายละเอียด