Score:0

อะไรคือความแตกต่างระหว่างนิพจน์ทั้งสองนี้ [Shell Script]

ธง gd

มือใหม่มาแล้ว ฉันมีปัญหาในการทำความเข้าใจความแตกต่างระหว่าง:

ให้ a=$a+$b
ให้ i=$i+1 

และ:

ก+=$ข
ฉัน=$(($ฉัน + 1))

มีความแตกต่างแน่นอนเพราะนิพจน์ที่สองทำลายสคริปต์ของฉัน ทำให้มีค่าเป็นขยะ

นี่คือสคริปต์ของฉัน:

คำถามคือ [ สคริปต์จำเป็นต้องให้ความสามารถในการใส่เครื่องหมายบางอย่างแก่ผู้ใช้เป็นอินพุตจนกว่าผู้ใช้จะให้ q ( เป็นทางออก ) หรือค่าลบ ในที่สุดเราต้องคำนวณค่ากลางของเครื่องหมายที่กำหนด ]

สคริปต์นี้ใช้งานได้ แต่ถ้าคุณเปลี่ยน ให้ moyenne=$moyenne+$note และ ให้ i=$i+1 กับ moyenne+=$หมายเหตุ และ ฉัน=$(($ฉัน + 1)) มันจะให้ค่าถังขยะสำหรับ มอเยน (ค่ากลาง).

#!/bin/bash

หมายเหตุ = 0
เมเยน=0
ฉัน=0

จนกระทั่ง [ "$note" -lt 0 ]; ทำ
  อ่าน -p "Entrer la note (appuyez sur q pour exitter):"
  ถ้า [ "$note" = "q" ]; แล้ว
    หมายเหตุ=-4
    เสียงสะท้อน "ออก"
  elif [ "$note" -ge 16 ]; แล้ว
    เสียงสะท้อน "Tres Bien"
  elif [ "$note" -ge 14 ]; แล้ว
    ก้อง "เบียน"
  elif [ "$note" -ge 12 ]; แล้ว
    เสียงสะท้อน "Assez bien"
  elif [ "$note" -ge 10 ]; แล้ว
    เสียงสะท้อน "มอเยน"
  elif [ "$note" -ge 0 ]; แล้ว
    เสียงสะท้อน "อินซัฟฟี"
  อื่น
    เสียงสะท้อน "ออก"
  ไฟ
  ถ้า [ "$note" -ge 0 ]; แล้ว
    ให้ moyenne=$moyenne+$note
    ให้ i=$i+1
  ไฟ
เสร็จแล้ว
มอยแอนน์=$(($มอยแอนน์ / $i))
เสียงก้อง "la moyenne est $moyenne de $i notes"

waltinator avatar
it flag
วางสคริปต์ของคุณใน `https://shellcheck.net` ซึ่งเป็นตัวตรวจสอบไวยากรณ์เสมอ หรือติดตั้ง `shellcheck` ในเครื่อง ใช้ 'shellcheck' เป็นส่วนหนึ่งของกระบวนการพัฒนาของคุณ
OUSSAMA ABBOU avatar
gd flag
@waltinator ขอบคุณค่ะ
Score:3
ธง hr

ส่วนที่เกี่ยวข้องของ ผู้ชายทุบตี:

   ในบริบทที่คำสั่งมอบหมายกำลังกำหนดค่าให้กับ a
   ตัวแปรเชลล์หรือดัชนีอาร์เรย์ สามารถใช้ตัวดำเนินการ += เพื่อต่อท้าย
   หรือเพิ่มให้กับค่าก่อนหน้าของตัวแปร ซึ่งรวมถึงการโต้แย้ง
   คำสั่งในตัวเช่นประกาศว่ายอมรับคำสั่งการมอบหมาย
   (คำสั่งประกาศ). เมื่อใช้ += กับตัวแปรที่
   มีการตั้งค่าแอตทริบิวต์จำนวนเต็ม ค่าจะถูกประเมินเป็นเลขคณิต exâ
   กดและเพิ่มค่าปัจจุบันของตัวแปร ซึ่งก็คือ evalâ
   อ้วน เมื่อใช้ += กับตัวแปรอาร์เรย์โดยใช้การมอบหมายแบบผสมâ
   ment (ดูอาร์เรย์ด้านล่าง) ค่าของตัวแปรจะไม่ถูกยกเลิก (ตามที่เป็นอยู่
   เมื่อใช้ =) และค่าใหม่จะถูกต่อท้ายอาร์เรย์โดยเริ่มต้นที่
   มากกว่าดัชนีสูงสุดของอาร์เรย์ (สำหรับอาร์เรย์ที่จัดทำดัชนี) หรือ
   เพิ่มเป็นคู่คีย์-ค่าเพิ่มเติมในอาร์เรย์ที่เชื่อมโยง เมื่อไหร่?
   เมื่อโยงกับตัวแปรค่าสตริง ค่าจะถูกขยายและต่อท้าย
   ค่าของตัวแปร

เนื่องจากคุณไม่ได้ตั้งค่าแอตทริบิวต์จำนวนเต็มสำหรับ , ก+=$ข จะดำเนินการ การต่อสตริง แทนการบวกเลขคณิต:

$a=1; ข=2; ก+=$ข; เสียงสะท้อน "$a"
12

ในทางตรงกันข้าม

$ ยกเลิกการตั้งค่า a b
$ ประกาศ -i a=1; ข=2; ก+=$ข; เสียงสะท้อน "$a"
3

หรือคุณสามารถบังคับการประเมินทางคณิตศาสตร์โดยใช้ (( ... ))

$ ยกเลิกการตั้งค่า a b
$a=1; ข=2; ((a+=$b)); เสียงสะท้อน "$a"
3

(โปรดทราบว่า ((ก+=ข)) ยังใช้งานได้ เดอะ $ ไม่จำเป็นต้องอ้างอิงตัวแปรในบริบทเลขคณิต)

OUSSAMA ABBOU avatar
gd flag
ขอบคุณ ตอนนี้ฉันเข้าใจแล้ว

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา