#!/bin/bash
read -p "enter search term here: " searchT
if [[ $(cat test.txt | grep -wi '$searchT') ]]; then
echo "$(cat test.txt | grep '$searchT' && wc -l) number of matches found"
echo $(cat test.txt | grep '$searchT')
else echo "no match found"
fi
exit 0
字符串
如果if statement
为true,我如何使脚本运行。当我运行脚本时,脚本将输出else
语句。因为没有值可与grep命令进行比较。
3条答案
按热度按时间31moq8wy1#
我们并不清楚您要匹配的是什么,但请记住,
if
接受一个命令并计算其返回值。如果匹配,则grep
成功;如果不匹配,则失败。所以你可能只想做:字符串
请注意,您应该使用双引号,以便展开“$searchT”,并将其值作为参数传递给grep,而不需要
cat
。在您的原始代码中,您有一行
echo $(cat test.txt | grep '$searchT')
,它有几个问题,但我将只解决反模式echo $(cmd)
。$()
收集cmd
的输出,并将其作为参数传递给echo
,然后由echo
写入这些参数。而不是echo $(cmd)
,你几乎总是可以只做cmd
和削减中间人。(echo
会压缩空白,也许会将cmd
的一些输出当作标志,所以输出并不总是相同的,但它几乎总是你想要的。如果您实际上是有意使用echo $(cmd)
来压缩空白,或者在cmd
的输出中使用标志,则会出现代码可读性问题!)在这种情况下,有一个比使用echo
更简单的解决方案。只需在grep
命令中省略-q
,并写入输出即可。c8ib6hqw2#
下面是另一种缓存结果的方法:
mapfile
将其stdin消耗到数组中,每行都是一个数组元素。字符串
jljoyd4f3#
字符串
根据评论修改:
型