ทุบตีถ้าในบรรทัดเดียว


51

ฉันต้องการทราบว่าฉันจะเขียนได้อย่างไรหากเงื่อนไขในสคริปต์ทุบตีในบรรทัดเดียว

ตัวอย่างเช่นฉันจะเขียนสิ่งนี้ในบรรทัดเดียวได้อย่างไรแล้ววางอีกอันเหมือนในบรรทัดถัดไป

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

ฉันถามสิ่งนี้เพราะฉันมีนามแฝงไม่มากใน. bashrc ของฉันและฉันมี. bashrc (ซิงค์) เหมือนกันในหลาย ๆ ระบบ แต่ฉันไม่ต้องการนามแฝงทั้งหมดในแต่ละระบบ ฉันใส่พวกเขาส่วนใหญ่ไว้ในงบถ้าและมันทำงานได้อย่างสวยงามในขณะนี้ แต่พวกเขาใช้พื้นที่จำนวนมาก 3 บรรทัดแต่ละบรรทัดบวกกับบรรทัดว่างระหว่างพวกเขา (ฉันชอบให้พวกเขามองเห็นได้ง่าย)

ฉันจะใช้เทคนิคนี้สำหรับตัวแปรสภาพแวดล้อมด้วย


4
คุณสามารถเขียน[ -f "/usr/bin/wine" ] && export WINEARCH=win32
เกล็

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

คำตอบ:


84

คุณจะเขียนมันเช่น:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

โปรดทราบว่าสิ่งนี้สามารถเขียนได้ (ตามที่แนะนำโดย @glennjackman):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
นั่นเป็นเรื่องง่าย ... :) ตอนนี้ฉันรู้สึกอึดอัดใจที่ถามว่า ขอบคุณสำหรับคำตอบสรรพช่วยมาก!
Horațiu Mlendea

7
มีความแตกต่างอย่างหนึ่งคือ 1. การแสดงออกจะออกด้วยสถานะ 0, 2. การแสดงออกจะออกด้วยสถานะที่ไม่ใช่ 0 ถ้าไฟล์ไม่อยู่ สิ่งนี้สามารถสร้างความแตกต่างได้ถ้าคุณใช้สิ่งนี้ในงานอัตโนมัติบางอย่างเช่นการปรับใช้ซึ่งความสำเร็จของงานขึ้นอยู่กับสถานะออกของคำสั่ง
Jānis Gruzis

@ HorațiuMlendea เห็นได้ชัดว่ามันง่าย ถ้าคุณรู้ว่า แต่ไวยากรณ์ผิดพลาดเช่น [1 == 1] เป็นข้อผิดพลาด แต่ [1 == 1] ทำงานได้ และกึ่งโคลอน คุณจะรู้สึกอึดอัดใจที่ไม่รู้จักไวยากรณ์ที่ออกแบบมาไม่ดีได้อย่างไร 'ความรู้สึก' ของคุณไม่สมเหตุสมผลเลย นี่เป็นคำถามที่มีประโยชน์แม้ว่าคุณจะไม่เข้าใจว่าทำไม
barlop

@ balop ไม่ฉันเห็นสิ่งที่คุณหมายถึงและฉันเห็นด้วย ในขณะนั้นฉันเข้าใจแต่ละบิตที่ประกอบขึ้นเป็นไวยากรณ์ (ส่วนที่มี &&) ปกติแล้วมันจะง่ายและใช้งานง่ายในการรวบรวมสิ่งต่าง ๆ แต่อย่างที่คุณพูดภาษานี้ค่อนข้างจะเล่นซอและไม่ง่ายนัก
Horațiu Mlendea

4

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


5
โปรดทราบว่าสิ่งนี้อาจขึ้นอยู่กับเชลล์ของคุณ (และอาจเพิ่มเติมในการตั้งค่าเชลล์) การทดสอบอย่างรวดเร็วบนคอมพิวเตอร์ของฉันแสดงให้เห็นว่าการทำงานใน Bash (มี +1) แต่ Zsh รักษาการแบ่งบรรทัดเมื่อกลับไปที่คำสั่งก่อนหน้า
8bittree
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.