단어(값)가 쉼표로 구분된 목록에 있는지 확인하세요.

단어(값)가 쉼표로 구분된 목록에 있는지 확인하세요.

아래 코드에서는 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를 찾습니다.

관련 정보