아래 코드에서는 2
일치하지 않아야 21
하지만 결과는 "일치"입니다.
SOURCE
값이 안에 있는지 어떻게 확인할 수 있나요 LIST
?
LIST="1,21,3,4"
SOURCE="2"
if echo "$LIST" | grep -q "$SOURCE"; then
echo "matched";
else
echo "no match";
fi
답변1
표준기술은
if echo ",$LIST," | grep -q ",$SOURCE,"
then
echo "matched"
else
echo "no match"
fi
(또는 이라고 말할 수도 있습니다 grep -q ",$SOURCE," <<< ",$LIST,"
). 검색은 2
일치 21
하지만 검색은 ,2,
일치하지 않습니다 ,21,
. 찾고 있는 숫자가 첫 번째 또는 마지막 숫자 $LIST
인 경우 시작과 끝에 쉼표를 추가해야 합니다.$SOURCE
grep -q ",1," <<< "1,21,3,4"
실패할 것이다.
답변2
"단어"의 사용은 (나에게) 단어 경계 구조를 찾을 수 있다는 제안입니다.
LIST="1,21,3,4"
SOURCE="2"
if echo "$LIST" | grep -q "\\<$SOURCE\\>"; then
echo "matched";
else
echo "no match";
fi
답변3
사용 awk
:
list="1,21,3,4"
source=2
awk -F, -v search="$source" '{ for (i=1;i<=NF;i++) { if ($i==search) {print $i} } }' <<<"$list"
2
전체 문자열 내에서 검색 중이며 21
실제로는 2
.
전체 문자열이 항상 쉼표로 구분되어 있는 경우 다음과 같이 할 수도 있습니다.
grep -E ',2,|,2$|^2,'
2
목록의 시작, 중간 또는 끝에서 a를 찾습니다.