Grep
grep 可以返回 true/false 還是有替代方法
作為該腳本的一部分,我需要能夠檢查給定的第一個參數是否與文件的第一個單詞匹配。如果是,則退出並顯示錯誤消息;如果沒有,請將參數附加到文件中。我了解如何編寫
if
語句,但不了解如何grep
在腳本中使用。我知道這grep
看起來像這樣grep ^$1 schemas.txt
我覺得這應該比我做的容易得多。
我在
if
聲明中收到“參數過多”的錯誤。我擺脫了兩者之間的空間grep -q
,然後得到了一個預期的錯誤二元運算符。if [ grep -q ^$1 schemas.txt ] then echo "Schema already exists. Please try again" exit 1 else echo "$@" >> schemas.txt fi
grep
如果發現某些東西(零)與沒有找到任何東西(非零),則返回不同的退出程式碼。在if
語句中,將零退出程式碼映射為“真”,將非零退出程式碼映射為假。另外,grep 有一個-q
參數不輸出匹配的文本(而只返回退出狀態碼)因此,您可以像這樣使用 grep:
if grep -q PATTERN file.txt; then echo found else echo not found fi
快速說明一下,當您執行類似的操作時
if [ -z "$var" ]…
,事實證明這[
實際上是您正在執行的命令,就像 grep 一樣。在我的系統上,它是/usr/bin/[
. (好吧,從技術上講,你的 shell 可能內置了它,但這是一種優化。它的行為就像是一個命令)。它的工作方式相同,[
返回一個零退出程式碼為真,一個非零退出程式碼為假。(test
與 相同[
,除了結束]
)