我只是想使用字符串变量确认一个路径存在于另一个路径中。
我的脚本:
#!/bin/bash
HAYSTACK="/cygdrive/d/var/www/html/adm4"
NEEDLE="/cygdrive/d/var/www/html"
# first try
#grep -q "$NEEDLE" "$HAYSTACK"
#second try
grep -q "${NEEDLE}" "${HAYSTACK}"
if [ $? -eq 0 ] ; then
echo "Your string has been found"
else
echo "Your string has not been found"
fi
结果:
me@localhost ~]$ ./testbash
grep: : No such file or directory
Your string has not been found
我怀疑因为这些是路径,所以我需要做更多的事情。
答案1
Grep 需要该格式的命令grep [options] PATTERN [FILE...]
,因此将第二个字符串视为要扫描的文件。如果只是一行,您可以将其发送到 stdin 上。
echo $haystack | grep $needle
或者您喜欢的方式。也许这里有一个字符串:
grep $needle <<< $haystack
答案2
==
使用表单时,Bash 具有与比较运算符的内置模式匹配[[ ]]
,因此您可以执行以下操作以避免完全调用 grep:
if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
echo "Your string has been found"
else
echo "Your string has not been found"
fi
如果需要执行更复杂的匹配,Bash 还支持正则表达式与=~
运算符的匹配。