문자열 변수를 사용하여 한 경로가 다른 경로 내에 존재하는지 확인하고 싶습니다.
내 스크립트:
#!/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는 정규식 및 =~
연산자 일치도 지원합니다.