TARGET='cat $TMP |grep $TXT | wc -l'
這assig ns字符串'cat $TMP |grep $TXT | wc -l'
到變量$TARGET
。
它看起來像你想要的是命令的輸出,這需要反引號:
TARGET=`cat $TMP |grep $TXT | wc -l`
,或者,如果你有一個比較現代的外殼,$(...)
語法:
TARGET=$(cat $TMP |grep $TXT | wc -l)
而且,該命令可以大大簡化,從上面到這個:
TARGET=$(grep $TXT $TMP | wc -l)
這樣:
if [ "$TARGET" -eq "1" ];
這樣::
TARGET=$(grep -c $TXT $TMP)
最後,$TARGET
變量可以完全如果您更改這個if
聲明消除
if [ $(grep -c "$TXT" "$TMP") = 1 ];
或者你可以使用[[
... ]]
而不是[
... ]
(它是bash的首選)。
或者,如果你只關心是否在所有發生的模式(而不是要求它恰好出現一次):
if grep -q "$TXT" "$TMP";
對於這個問題,可以消除$TMP
文件爲好;我將把它作爲一個練習。 8)}
請查閱有關grep
的文檔以瞭解選件的功能。 (-c
選項告訴它打印匹配數,-q
什麼都不打印,但仍然設置狀態以指示是否找到該模式)。
請注意,我還在變量引用周圍添加了引號,如果它們的值可能包含任何特殊字符,那麼這是很好的做法。
好的答案,但我想指出(儘管在這種情況下不是明顯的效用),問題的腳本明確地測試了匹配的數量爲1,如果以某種方式不運行'$ RESTART'兩個或兩個以上的文件匹配(: – DopeGhoti
@DopeGhoti:良好的捕獲,謝謝。我已經更新了我的答案。 –
很好的答案,但我認爲你的意思是'-q' - 正如你在下面的文字中提到的 - 而不是在'''s'中,'''不應該在那裏。最後,還有一點值得一提的是,在bash中[[''優先於''' – mklement0