Linux: คำสั่ง set สำหรับตัวแปรโลคัล


9

ฉันพยายามทำความเข้าใจกับตัวแปรโลคัล / สภาพแวดล้อมและคำสั่งส่งออก / ตั้งค่า

$ set FILEM="razrax"
$ echo $FILEM

$ FILEN="test"
$ echo $FILEN
test

โปรดอธิบายว่าทำไมecho $FILEMส่งคืนสตริงว่าง

คำตอบ:


21

คุณกำลังสับสนกับ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)

(ช่องว่างรอบ ๆ=ไม่จำเป็น)


ขอบคุณสำหรับคำตอบที่ดี สิ่งเดียวที่ฉันไม่เข้าใจคือความแตกต่างของตัวเลือก benweet และตัวแปรท้องถิ่น "set คือคำสั่งเพื่อตั้งค่าตัวเลือก"?
iJava

@iJava set -Cตั้งค่า-Cตัวเลือก (เหมือนset -o noclobber) set fooกำหนดfooให้$1(และ$#เป็น 1, ( $2, $3จะไม่ถูกตั้งค่าหากตั้งไว้ก่อนหน้านี้)) ตรวจสอบคู่มือเชลล์ของคุณสำหรับรายละเอียด
Stéphane Chazelas

1
ฉันไม่เข้าใจว่ามีตัวเลือกอะไรบ้าง ตัวเลือกเหล่านี้ถูกส่งไปยังโปรแกรมเช่น main (String [] args) หรือไม่ หรืออะไร? พวกเขาใช้ที่ไหน
iJava

1
@iJava มีการตั้งค่าที่ส่งผลต่อพฤติกรรมของเชลล์ อีกครั้งRTFM
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.