เหตุใด bash จึงต้องการ && เพื่อสะท้อนตัวแปรในหนึ่งบรรทัด


12

ทำไม SOMETHING=1 && echo $SOMETHINGต้อง&&กลับ1
ทำไมไม่SOMETHING=1 echo $SOMETHINGกลับ1


7
อัปยศกับใครก็ตามที่ลงคะแนนคำถามของคุณโดยเฉพาะอย่างยิ่งโดยไม่ต้องแสดงความคิดเห็นอย่างสร้างสรรค์ มันเป็นคำถามที่ถูกต้องและลำดับที่ bash ทำการขยายคำ / พารามิเตอร์ / ตัวแปร / ตัวหนอนและการดำเนินการคำสั่งนั้นยุ่งยาก ฉันจะให้ +1
Spiff


ในทางเทคนิค "echo 1" ส่งคืนค่า 0 และเอาต์พุตคือ 1 ... กล่าวคือ "echo" ออกจากสถานะ "0" และแสดงเพื่อ stdout อาร์กิวเมนต์ การใช้ถ้อยคำ "ส่งคืน 1" สำหรับฉันนั้นหมายถึง "ทางออกหยุด" ไม่ใช่ "เอาท์พุท" และสับสนเล็กน้อยเมื่อมองแวบแรก
ไมเคิล

คำตอบ:


8

เนื่องจาก bash ทำการขยายตัวตัวแปรก่อนตีความคำสั่งการกำหนดตัวแปร ดังนั้นเนื่องจาก SOMETHING ไม่ได้ถูกกำหนดไว้ก่อนหน้านี้คำสั่งของคุณจะกลายเป็น ...

SOMETHING=1 echo ''

…จากนั้นถูกประหาร


การขยายตัวของตัวแปรเหมือนกับการทดแทนตัวแปรหรือไม่
Joel

1
@JoelL: ถูกต้อง
Gordon Davisson

0

ส่งออกและสะท้อนในเวลาเดียวกัน

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# echo $SOMETHING
1
root@kali:~# unset SOMETHING
root@kali:~# echo $SOMETHING

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# 

อีกตัวอย่างหนึ่งที่คนโง่ xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.