Skip to main content

ทั้งหมดเกี่ยวกับคำสั่ง Linux / Unix: expr

ทำความรู้จักกับ Linux Command ตอน คำสั่งสร้าง Directory (เมษายน 2025)

ทำความรู้จักกับ Linux Command ตอน คำสั่งสร้าง Directory (เมษายน 2025)
Anonim

ชื่อ

expr - ประเมินนิพจน์

สรุป

expr หาเรื่อง ? อาร์กิวเมนต์ arg … ?

เชื่อม หาเรื่อง 's (การเพิ่มช่องว่างคั่นระหว่างพวกเขา), ประเมินผลเป็นนิพจน์ Tcl และส่งกลับค่า ตัวดำเนินการอนุญาตในนิพจน์ Tcl เป็นเซตย่อยของโอเปอเรเตอร์ที่ได้รับอนุญาตในนิพจน์ C และมีความหมายและความสำคัญเช่นเดียวกับตัวดำเนินการ C ที่สอดคล้องกัน นิพจน์เกือบจะให้ผลลัพธ์เป็นตัวเลข (ค่าจำนวนเต็มหรือทศนิยม) ตัวอย่างเช่นนิพจน์

expr 8.2 + 6

ประเมินเป็น 14.2 นิพจน์ Tcl จะแตกต่างจากนิพจน์ C ในลักษณะที่ระบุตัวดำเนินการ นอกจากนี้การแสดงผล Tcl สนับสนุนตัวดำเนินการที่ไม่ใช่ตัวเลขและการเปรียบเทียบสายอักขระ

ถูกดำเนินการ

การแสดงออกของ Tcl ประกอบไปด้วยตัวดำเนินการตัวดำเนินการและวงเล็บ พื้นที่สีขาวอาจถูกใช้ระหว่างตัวดำเนินการและโอเปอเรเตอร์และวงเล็บ มันไม่สนใจคำแนะนำของนิพจน์ ที่เป็นไปได้ตัวถูกดำเนินการถูกตีความว่าเป็นค่าจำนวนเต็ม ค่าจำนวนเต็มอาจระบุเป็นทศนิยม (กรณีปกติ) ในรูป octal (ถ้าอักขระตัวแรกของโอเปอแรนด์คือ0) หรือเลขฐานสิบหก (ถ้าสองตัวแรกของตัวถูกดำเนินการอยู่0x) หากโอเปอรแรนดไมมีรูปแบบจํานวนเต็มที่ระบุไวดวยขอนั้นจะถือวาเปนจํานวนจุดลอยตัวหากเปนไปได ตัวเลขทศนิยมอาจถูกระบุด้วยวิธีใดก็ได้ที่ยอมรับโดยคอมไพเลอร์ C ที่สอดคล้องกับ ANSI (ยกเว้นว่าจะใช้, F, ล., และL ต่อท้ายจะไม่ได้รับอนุญาตในการติดตั้งส่วนใหญ่) ตัวอย่างเช่นทั้งหมดต่อไปนี้เป็นตัวเลขทศนิยมที่ถูกต้อง: 2.1, 3, 6e4, 7.91e + 16 ถ้าไม่มีการตีความตัวเลขเป็นไปได้ตัวถูกดำเนินการจะถูกปล่อยให้เป็นสตริง (และสามารถใช้ตัวดำเนินการ จำกัด ได้)

Operands สามารถระบุได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

1

เป็นค่าตัวเลขทั้งจำนวนเต็มหรือทศนิยม

2

เป็นตัวแปร Tcl โดยใช้มาตรฐาน$ เอกสาร ค่าของตัวแปรจะถูกใช้เป็นตัวถูกดำเนินการ

3

เป็นสตริงที่อยู่ในเครื่องหมายคำพูดคู่ parser นิพจน์จะดำเนินการแทนเครื่องหมายทับขวา, ตัวแปรและคำสั่งบนข้อมูลระหว่างคำพูดและใช้ค่าผลลัพธ์เป็นตัวถูกดำเนินการ

4

เป็นสตริงที่ล้อมรอบด้วยวงเล็บปีกกา อักขระระหว่างรั้งเปิดและการจับคู่วงเล็บปีกกาใกล้จะถูกใช้เป็นตัวถูกดำเนินการโดยไม่มีการแทนใด ๆ

5

เป็นคำสั่ง Tcl ที่อยู่ในวงเล็บ คำสั่งจะถูกดำเนินการและผลของมันจะถูกใช้เป็นตัวถูกดำเนินการ

6

เป็นฟังก์ชันทางคณิตศาสตร์ที่อาร์กิวเมนต์มีรูปแบบข้างต้นสำหรับตัวดำเนินการเช่นบาป ($ x). ดูด้านล่างสำหรับรายการของฟังก์ชันที่กำหนดไว้

ในกรณีที่มีการแทนที่เกิดขึ้นด้านบน (เช่นภายในสตริงที่ยกมา) จะใช้คำแนะนำในการแสดงออก อย่างไรก็ตามอาจมีการทดแทนการทดแทนเพิ่มเติมจากตัวจำแนกคำสั่งก่อนที่จะประมวลผลตัวประมวลผลนิพจน์ ดังที่กล่าวไว้ด้านล่างนี้โดยปกติแล้วควรใส่นิพจน์ในเครื่องหมายวงเล็บเพื่อป้องกันไม่ให้ตัวแบ่งลำดับคำสั่งดำเนินการแทนเนื้อหา

สำหรับตัวอย่างของนิพจน์ง่ายๆสมมุติว่าตัวแปร มีค่า 3 และตัวแปรมีค่า 6 แล้วคำสั่งที่ด้านซ้ายของแต่ละบรรทัดด้านล่างจะให้ค่าทางด้านขวาของบรรทัด:

expr 3.1 + $ a6.1 expr 2 + "$ a. $ b" 5.6 expr 4 * llength "6 2" 8 expr {{คำหนึ่ง} <"word $ a"} 0

ผู้ประกอบการ

โอเปอเรเตอร์ที่ถูกต้องระบุไว้ด้านล่างนี้จัดกลุ่มไว้ในลำดับความสำคัญที่ลดลง:

- + ~ !

Unary ลบ, เอกภาพ plus, bit-wise NOT, logical NOT ไม่มีตัวถูกดำเนินการเหล่านี้อาจถูกนำมาใช้กับตัวดำเนินการสตริงและบิตที่ชาญฉลาดอาจใช้เฉพาะกับจำนวนเต็มเท่านั้น

* / %

คูณหารส่วนที่เหลือ ไม่มีตัวถูกดำเนินการเหล่านี้อาจถูกนำมาใช้กับตัวดำเนินการสตริงและส่วนที่เหลืออาจใช้กับจำนวนเต็มเท่านั้น ส่วนที่เหลือจะมีเครื่องหมายเท่ากับตัวหารเสมอและค่าสัมบูรณ์น้อยกว่าตัวหาร

+ -

เพิ่มและลบ ใช้ได้กับตัวนับตัวเลขใดก็ได้

<< >>

การเลื่อนซ้ายและขวา ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น การเลื่อนทางขวาจะเผยแพร่บิตลงชื่อเข้าใช้เสมอ

< > <= >=

บูลีนน้อยกว่ามากน้อยกว่าหรือเท่ากับและมากกว่าหรือเท่ากับ โอเปอเรเตอร์แต่ละตัวสร้าง 1 ถ้าเงื่อนไขเป็นจริง 0 มิฉะนั้น โอเปอเรเตอร์เหล่านี้อาจใช้กับสตริงและตัวดำเนินการตัวเลขซึ่งในกรณีนี้จะใช้การเปรียบเทียบสตริง

== !=

บูลีนเท่ากับและไม่เท่ากัน ผู้ดำเนินงานแต่ละรายสร้างผลลัพธ์เป็นศูนย์ / หนึ่งรายการ ใช้ได้กับทุกโอเปอแรนด์

&

บิตฉลาด AND ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น

^

Bit-wise exclusive OR ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น

|

บิตฉลาด OR ใช้ได้สำหรับโอเปอรริบิวจำนวนเต็มเท่านั้น

&&

ตรรกะ AND ผลลัพธ์ 1 ถ้าทั้งสองตัวถูกดำเนินการไม่เป็นศูนย์ 0 มิฉะนั้น ใช้ได้กับโอลเดอร์แบบบูลีนและตัวเลข (จำนวนเต็มหรือทศนิยม) เท่านั้น

||

เหตุผล OR ผลลัพธ์ 0 ถ้าทั้งสองตัวถูกดำเนินการเป็นศูนย์ 1 มิฉะนั้น ใช้ได้กับโอลเดอร์แบบบูลีนและตัวเลข (จำนวนเต็มหรือทศนิยม) เท่านั้น

x ? Y : Z

ถ้า - แล้ว - อื่นเช่นเดียวกับใน C. ถ้า x ประเมินเป็นค่าที่ไม่ใช่ศูนย์แล้วผลลัพธ์คือค่าของ Y . มิฉะนั้นผลที่ได้คือค่าของ Z . x โอเปอเรเตอร์ต้องมีค่าตัวเลข

ดูคู่มือ C สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับผลลัพธ์ที่ได้จากผู้ประกอบการแต่ละราย กลุ่มผู้ดำเนินการแบบไบนารีทั้งหมดจากซ้ายไปขวาจะอยู่ในระดับความสำคัญเดียวกัน ตัวอย่างเช่นคำสั่ง

expr 4 * 2 <7

ส่งกลับ 0

&&, ||, และ?: ผู้ประกอบการมี `` การประเมินผลขี้เกียจ '' เช่นเดียวกับใน C ซึ่งหมายความว่าตัวถูกดำเนินการไม่ได้รับการประเมินหากไม่จำเป็นต้องใช้เพื่อกำหนดผลลัพธ์ ตัวอย่างเช่นในคำสั่ง

expr {$ v? a: b}

เพียงหนึ่งในเป็น หรือb จะได้รับการประเมินขึ้นอยู่กับค่าของ$ วี. อย่างไรก็ตามโปรดทราบว่านี่เป็นจริงถ้านิพจน์ทั้งตัวอยู่ในวงเล็บปีกกา มิฉะนั้นตัวแบ่งวิเคราะห์ Tcl จะประเมินทั้งสองอย่างเป็น และb ก่อนเรียกใช้expr คำสั่ง

ฟังก์ชันคณิตศาสตร์

Tcl สนับสนุนฟังก์ชั่นทางคณิตศาสตร์ต่อไปนี้ในการแสดงออก:

เอบีเอส กระบองเข้าสู่ระบบsqrt acos สองlog10srand มิดชิด ประสบการณ์ธารสีน้ำตาล Atan ชั้นแรนด์tanh atan2 fmodรอบ ceil hypotบาป cos intSinh

เอบีเอส ( หาเรื่อง )

ส่งคืนค่าสัมบูรณ์ของ หาเรื่อง . หาเรื่อง อาจเป็นจำนวนเต็มหรือทศนิยมและผลจะถูกส่งกลับในรูปแบบเดียวกัน

acos ( หาเรื่อง )

ส่งค่าโคไซน์โคไซน์ของ หาเรื่อง ในช่วง 0, pi เรเดียน หาเรื่อง ควรอยู่ในช่วง -1,1

มิดชิด ( หาเรื่อง )

ส่งกลับอาร์คไซน์ของ หาเรื่อง , ในเรเดียนช่วง -pi / 2, pi / 2 หาเรื่อง ควรอยู่ในช่วง -1,1

Atan ( หาเรื่อง )

ส่งกลับค่าอาร์กสัมผัสของ หาเรื่อง , ในเรเดียนช่วง -pi / 2, pi / 2

atan2 ( x, y )

ส่งกลับค่าอาร์กสัมผัสของ Y / x ในช่วง -pi, pi เรเดียน x และ Y ไม่สามารถเป็น 0 ได้

ceil ( หาเรื่อง )

ส่งกลับค่าจำนวนเต็มที่เล็กที่สุดไม่น้อยกว่า หาเรื่อง .

cos ( หาเรื่อง )

ส่งค่าโคไซน์ของ หาเรื่อง วัดเป็นเรเดียน

กระบอง ( หาเรื่อง )

ส่งกลับค่าโคไซน์ไฮเปอร์โบลิกของ หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น

คู่ ( หาเรื่อง )

ถ้า หาเรื่อง เป็นค่าลอยตัวส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง ให้ลอยตัวและส่งกลับค่าที่แปลงแล้ว

ประสบการณ์ ( หาเรื่อง )

ส่งกลับค่าเลขชี้กำลังของ หาเรื่อง , หมายถึง e ** หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น

ชั้น ( หาเรื่อง )

ส่งกลับค่ารวมที่ใหญ่ที่สุดไม่เกิน หาเรื่อง .

fmod ( x, y )

ส่งคืนส่วนที่เหลือลอยตัวของส่วนของ x โดย Y . ถ้า Y เป็น 0 ข้อผิดพลาดจะถูกส่งกลับ

hypot ( x, y )

คำนวณความยาวของด้านตรงข้ามของรูปสามเหลี่ยมมุมฉากด้านขวา ( x * x + Y * Y ).

int ( หาเรื่อง )

ถ้า หาเรื่อง เป็นจำนวนเต็มค่าส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง เป็นจำนวนเต็มโดยการตัดทอนและส่งกลับค่าที่แปลงแล้ว

เข้าสู่ระบบ ( หาเรื่อง )

ส่งกลับค่าลอการิทึมธรรมชาติของ หาเรื่อง . หาเรื่อง ต้องเป็นค่าบวก

log10 ( หาเรื่อง )

ส่งกลับค่าลออริฐาน 10 ของ หาเรื่อง . หาเรื่อง ต้องเป็นค่าบวก

ธาร ( x, y )

คำนวณค่าของ x ยกขึ้นเพื่ออำนาจ Y . ถ้า x เป็นลบ, Y ต้องเป็นค่าจำนวนเต็ม

แรนด์ ()

แสดงจำนวนจุดลอยจากศูนย์เป็นเพียงน้อยกว่าหนึ่งหรือในเทอมเชิงคณิตศาสตร์ช่วง 0,1) เมล็ดมาจากนาฬิกาภายในของเครื่องหรืออาจจะตั้งค่าด้วยตนเองด้วยฟังก์ชัน srand

รอบ( หาเรื่อง )

ถ้า หาเรื่อง เป็นจำนวนเต็มค่าส่งกลับ หาเรื่อง , มิฉะนั้นแปลง หาเรื่อง เป็นจำนวนเต็มโดยการปัดเศษและส่งกลับค่าที่แปลงแล้ว

บาป( หาเรื่อง )

ส่งกลับไซน์ของ หาเรื่อง วัดเป็นเรเดียน

Sinh ( หาเรื่อง )

ส่งกลับค่าไฮเปอร์โบลิกไซน์ของ หาเรื่อง . หากผลที่ได้จะทำให้เกิดการล้น

sqrt ( หาเรื่อง )

แสดงรากที่สองของ หาเรื่อง . หาเรื่อง ต้องไม่ใช่เชิงลบ

srand ( หาเรื่อง )

หาเรื่อง ซึ่งจะต้องเป็นจำนวนเต็มจะถูกใช้เพื่อตั้งค่าเมล็ดสำหรับเครื่องกำเนิดตัวเลขแบบสุ่ม ส่งกลับหมายเลขสุ่มแรกจากเมล็ดพันธุ์นั้น ล่ามแต่ละคนมีเมล็ดของตัวเอง

สีน้ำตาล ( หาเรื่อง )

ส่งกลับค่าสัมผัสกันของ หาเรื่อง วัดเป็นเรเดียน

tanh ( หาเรื่อง )

ส่งกลับค่าการติดต่อกันเกินความจริงของ หาเรื่อง .

นอกจากฟังก์ชันที่กำหนดไว้ล่วงหน้าแล้วแอ็พพลิเคชันอาจกำหนดฟังก์ชันเพิ่มเติมโดยใช้Tcl_CreateMathFunc().

ประเภทล้นและความแม่นยำ

การคำนวณภายในทั้งหมดที่เกี่ยวข้องกับจำนวนเต็มจะกระทำกับประเภท C ยาว และการคํานวณภายในทั้งหมดที่เกี่ยวของกับจุดลอยตัวจะทําดวยชนิด C สอง . เมื่อแปลงสตริงเป็นจุดลอยตัวจะมีการตรวจพบการล้นล้นอันเป็นลําดับและทำให้เกิดข้อผิดพลาด Tcl สำหรับการแปลงเป็นจำนวนเต็มจากสตริงการตรวจจับการทั่งล้นจะขึ้นอยู่กับพฤติกรรมของกิจวัตรในไลบรารี C ในเครื่องดังนั้นจึงควรถือว่าไม่น่าเชื่อถือ ไม่ว่าในกรณีใด ๆ จำนวนเต็ม overflow และ underflow โดยทั่วไปจะไม่สามารถตรวจจับได้อย่างน่าเชื่อถือสำหรับผลลัพธ์ระดับกลาง การตรวจจับระดับล้นและจุดต่ำสุดที่ลอยตัวอยู่ในระดับที่ฮาร์ดแวร์สนับสนุนซึ่งโดยทั่วไปน่าเชื่อถือมาก

การแปลงค่าระหว่างการแทนภายในสำหรับตัวดำเนินการจำนวนเต็มทศนิยมและสตริงจะดำเนินการโดยอัตโนมัติตามที่ต้องการ สำหรับการคำนวณทางคณิตศาสตร์จำนวนเต็มจะถูกใช้จนกว่าจะมีการใช้ตัวเลขลอยตัวบางจุดหลังจากที่ใช้จุดลอยตัวแล้ว ตัวอย่างเช่น,

expr 5/4

ส่งกลับ 1 ขณะ

expr 5 / 4.0 expr 5 / (string length "abcd" + 0.0)

ทั้งสองกลับ 1.25 ค่า Floating-point จะถูกส่งกลับเสมอด้วย ``.'หรือ aอี เพื่อให้พวกเขาจะไม่เหมือนค่าจำนวนเต็ม ตัวอย่างเช่น,

expr 20.0 / 5.0

ผลตอบแทน4.0ไม่ใช่4.

การดำเนินการของสตริง

ค่าสตริงอาจใช้เป็นโอเปอเรเตอร์ของโอเปอเรเตอร์การเปรียบเทียบแม้ว่าผู้ประเมินนิพจน์จะพยายามทำเปรียบเทียบเป็นจำนวนเต็มหรือทศนิยมเมื่อทำได้ ถ้าตัวดำเนินการหนึ่งของการเปรียบเทียบเป็นสตริงและอีกตัวหนึ่งมีค่าตัวเลขโอเปอเรเตอร์ตัวเลขจะถูกแปลงเป็นสตริงโดยใช้ C sprintf ตัวระบุรูปแบบ% d สำหรับ integers และ% g สำหรับค่าจุดลอยตัว ตัวอย่างเช่นคำสั่ง

expr {"0x03"> "2"} expr {"0y" <"0x12"}

ทั้งสองกลับ 1 การเปรียบเทียบแรกจะทำโดยใช้การเปรียบเทียบจำนวนเต็มและที่สองจะทำโดยใช้การเปรียบเทียบสตริงหลังจากที่ตัวถูกดำเนินการที่สองถูกแปลงเป็นสตริง18. เนื่องจาก Tcl มีแนวโน้มที่จะถือว่าค่าเป็นตัวเลขเมื่อทำได้อย่าใช้โอเปอเรเตอร์อย่างเช่น==เมื่อคุณต้องการสตริงเปรียบเทียบและค่าของตัวถูกดำเนินการอาจจะ arbitrary; ในกรณีเหล่านี้จะดีกว่าในการใช้เชือก คำสั่งแทน

ข้อควรพิจารณาด้านประสิทธิภาพ

ใส่นิพจน์ในเครื่องหมายวงเล็บเพื่อให้ได้ความเร็วที่ดีที่สุดและข้อกำหนดในการจัดเก็บข้อมูลที่เล็กที่สุด ซึ่งจะช่วยให้คอมไพเลอร์ bytecode Tcl สร้างรหัสที่ดีที่สุด

ดังกล่าวข้างต้นการแสดงออกจะถูกแทนที่สองครั้ง: ครั้งโดย parser Tcl และครั้งโดย expr คำสั่ง ตัวอย่างเช่นคำสั่ง

ตั้งค่า 3 ตั้งค่า b {$ a + 2} expr $ b * 4

return 11 ไม่ใช่ multiple ของ 4 เนื่องจากตัวแบ่งส่วน Tcl จะถูกแทนที่ก่อน$ a + 2 สำหรับตัวแปร, แล้วexpr คำสั่งจะประเมินการแสดงออก$ a + 2 * 4.

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

คำสำคัญ

เลขคณิต, แบบบูล, เปรียบเทียบ, การแสดงออก, การเปรียบเทียบเลือน

สำคัญ: ใช้ ชาย คำสั่ง ( % ชาย ) เพื่อดูว่ามีการใช้คำสั่งใดในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ