第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要測試“ $?”以查看命令是否成功(反模式)?

為什么要測試“ $?”以查看命令是否成功(反模式)?

慕虎7371278 2019-11-20 14:18:05
我在這里看到測試是否為$?為零(成功)或其他內(nèi)容(失?。┦欠茨J?,但是我無法在其他任何地方找到它。堅持Wikipedia的反模式定義:“反模式(或反模式)是對反復出現(xiàn)的問題的普遍反應,該問題通常無效,并且具有適得其反的風險。” 為什么這會是反模式?
查看完整描述

3 回答

?
莫回無

TA貢獻1865條經(jīng)驗 獲得超7個贊

這是一種反模式,因為它引入了復雜性,如果您根本不需要記錄退出狀態(tài),那么就不會存在這種復雜性。


if your_command; then ...

出錯的幾率比


your_command

if [ "$?" -eq 0 ]; then ...

有關(guān)可能出錯的示例:考慮陷阱,甚至考慮echo添加用于調(diào)試,修改的新語句$?。對于讀者而言,在視覺上并不明顯,your_command在不更改邏輯流程的情況下,單獨運行的一行不能在其下添加任何內(nèi)容。


那是:


your_command

echo "Finished running your_command" >&2

if [ "$?" -eq 0 ]; then ...

...正在檢查echo,而不是實際命令。


因此,在情況下,你真的做需要應對的方式退出狀態(tài)不是馬上在其值是否為零分支更精細的,你應該收集它在同一行:


# whitelisting a nonzero value for an example of when "if your_command" won't do.

your_command; your_command_retval=$?

echo "Finished running your_command" >&2 ## now, adding more logging won't break the logic.

case $your_command_retval in

  0|2) echo "your_command exited in an acceptable way" >&2;;

  *)   echo "your_command exited in an unacceptable way" >&2;;

esac

最后:如果您附上your_command的內(nèi)部if聲明,這標志著它作為測試,這樣你的shell不會考慮為目的的非零退出狀態(tài)set -e或ERR陷阱。


從而:


set -e

your_command

if [ "$?" -eq 0 ]; then ...

...將永遠不會(除非有許多困擾set -e行為的極端情況和警告)if以$?除以外的其他任何值到達該語句0,因為set -e在這種情況下將強制退出。相比之下:


set -e

if your_command; then ...

...將標記your_command為已測試的退出狀態(tài),因此不認為它會導致腳本強制退出per set -e。


查看完整回答
反對 回復 2019-11-20
?
楊__羊羊

TA貢獻1943條經(jīng)驗 獲得超7個贊

“通常無效”是該定義中經(jīng)過深思熟慮的組成部分。如果有一種最佳實踐替代方案可以解決主要陷阱或警告,而又沒有任何負面折衷,則某些事情可能在超過50%的時間工作時成為反模式。確實,一些反模式之類的東西之所以如此,是因為它們帶來了安全風險。一個安全漏洞只需要利用一次就可以使具有該漏洞的代碼不可接受,而不是超過50%的執(zhí)行。

查看完整回答
反對 回復 2019-11-20
?
陪伴而非守候

TA貢獻1757條經(jīng)驗 獲得超8個贊

經(jīng)過這么多年的軟件編寫,除了在早期開發(fā)工作中我對調(diào)試用輸出感興趣的情況下,我不會使用錯誤的格式。如前所述,不要增加不必要的復雜性。

查看完整回答
反對 回復 2019-11-20
  • 3 回答
  • 0 關(guān)注
  • 710 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號