ก) เอาต์พุตของ command1 สามารถจับได้ด้วย
output=$(diff "helloworld$x.out" "output/helloworld$x.out")
หรือกับ backticks แต่สิ่งเหล่านี้เป็นสิ่งที่ท้อใจเพราะคุณไม่สามารถซ้อนมันและพวกมันอาจแยกความแตกต่างจาก apostrophs ได้ยากขึ้นอยู่กับตัวอักษร:
output=`cmd1`
b) แทนที่จะเขียนไปยังไฟล์แล้วอ่านไฟล์นั้น (หรือหยิบเอาท์พุทแล้วสะท้อนออกมา) คุณควรใช้ไพพ์โดยตรง:
cmd1 > file
cat file | cmd2
output=$(cmd1)
echo "${output}" | cmd2
=>
cmd1 | cmd2
แต่ในตัวอย่างของคุณคุณไม่สนใจผลลัพธ์ แต่ผลลัพธ์ของโปรแกรม - ใช้งานได้จริงหรือ
diff "helloworld$x.out" "output/helloworld$x.out" && echo "success" || echo "failure"
หากต้องการอ่านเกี่ยวกับการใช้ && และ || ค้นหา "ทางลัดและทางลัดหรือ"
เพื่อรักษาความสะอาดเอาท์พุทคุณสามารถเปลี่ยนทิศทางของ 'diff' ไปที่ใดก็ได้:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null && echo "success" || echo "failure"
เพื่อคว้าความสำเร็จและประเมินผลในภายหลังคุณเก็บผลลัพธ์ของคำสั่งสุดท้ายในตัวแปรด้วย $ ?:
diff "helloworld$x.out" "output/helloworld$x.out" >/dev/null
result=$?
# do something else
case $result in
0) echo success ;;
*) echo failure ;;
esac
... > /dev/null
เกิดขึ้นในบริบทนี้ ผลลัพธ์ของ diff จะเป็น goto / dev / null แต่ไม่ใช่ว่าอะไร?