這是我的代碼,它總是只回傳“false”:-
export STR="MYC-14:: This is sample string only."
echo $STR
test -z "$(echo "$STR" | sed '/^MYC-/p' )" && echo "true" || echo "false"
我正在嘗試從名為“ STR ”的變數中匹配起始字符“ MYC- ”,但似乎條件中的正則運算式是錯誤的,因為哪個測驗命令回傳錯誤。sed
uj5u.com熱心網友回復:
test -z "$str"$str當是空字串時成功(回傳 0) 。您的sed命令正在輸出資料,因此字串不為空且test失敗(回傳非零)。所以echo "false"分支被執行。
請注意,這test不是“回傳錯誤”。它回傳非零值(例如,它失敗了)。 if不測驗布爾條件,最好不要考慮真/假,而是考慮成功/失敗。 test失敗,因為它測驗的字串不為空。因為sed產生了一些輸出。
如果要測驗字串是否為空字串,請使用test -n.
uj5u.com熱心網友回復:
默認情況下,sed總是在處理后輸出該行。所以,
echo "$STR" | sed '/^MYC-/p'
將始終輸出該行:如果不匹配,則輸出一次,如果匹配則輸出兩次。
用于sed -n告訴 sed默認情況下不要列印該行。
大多數 shell 可以在不運行外部工具的情況下對其進行測驗。例如,在 bash 你可以寫
if [[ $STR = MYC-* ]] ; then
...
fi
uj5u.com熱心網友回復:
最后,我能夠讓它作業: -
export STR="MYC-14:: This is sample string only."
echo $STR
test -z "$(echo "$STR" | sed '/^MYC-/d' )" && echo "truee" || echo "falsee"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/517278.html
標籤:linuxsed
上一篇:為什么`__vfprintf_internal`(`stdio.h`中的`printfn`)強制`$rbp`在我的x86-64機器上向前跳轉6313864位元組?
