Grep

grep 可以返回 true/false 還是有替代方法

  • March 11, 2022

作為該腳本的一部分,我需要能夠檢查給定的第一個參數是否與文件的第一個單詞匹配。如果是,則退出並顯示錯誤消息;如果沒有,請將參數附加到文件中。我了解如何編寫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與 相同[,除了結束]

引用自:https://unix.stackexchange.com/questions/48535