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