답변:
이것은 정규 표현식을 사용하는 Bash 전용 (> = 버전 3) 솔루션입니다.
if [[ "$WORD" =~ ^(cat|dog|horse)$ ]]; then
echo "$WORD is in the list"
else
echo "$WORD is not in the list"
fi
단어 목록이 길면 파일에 저장하고 (한 줄에 한 단어 씩) 다음을 수행하십시오.
if [[ "$WORD" =~ $(echo ^\($(paste -sd'|' /your/file)\)$) ]]; then
echo "$WORD is in the list"
else
echo "$WORD is not in the list"
fi
파일 접근 방식에 대한 한 가지주의 사항 :
파일에 공백이 있으면 중단됩니다. 이것은 다음과 같은 방법으로 해결할 수 있습니다.
sed 's/[[:blank:]]//g' /your/file | paste -sd '|' /dev/stdin
^
및로 패턴을 올바르게 고정하도록 상기시켜 준 @terdon에게 감사합니다 $
.
[[
하고 ]]
- [
그리고 ]
충분하지 않습니다.
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
필자는 스크립트 인수를 확인하기 위해 '한 줄'솔루션을 찾고 있었고 위의 Joseph R. 답변을 사용 했습니다.
[[ "$ARG" =~ ^(true|false)$ ]] || { echo "Argument received invalid value" ; exit 1 ; }
목록을 자주 변경하거나 여러 스크립트에서 공유하기를 원하는 경우 단어 목록을 파일에 넣을 수 있습니다. 스크립트에서 관리하기에 목록이 너무 길어지면 단어를 파일에 넣어야 할 수도 있습니다. 그럼 당신은 말할 수 있습니다
if fgrep –qx "$WORD" word_list
fgrep을 사용하여 허용되는 모든 단어를 지정할 수 있습니다.
if $(echo "$WORD" | fgrep -wq -e dog -e cat -e horse) ; then
echo yes
else
echo no
fi
-w
플래그는, 단지 전체 단어 일치 -q
플래그가 자동으로 작동 할 수 있습니다 (우리가 필요로하는 모든이의 반환 값이기 때문에 문을 사용하는 경우) 및 각 -e
패턴이 허용하는 패턴을 지정합니다.
fgrep
정규식 일치 대신 일반 문자열 일치를 수행하는 grep 버전입니다. 당신이있는 경우 grep
, 당신은해야한다 fgrep
, 그렇지 않은 경우, 그것은 사용하는 동일한의 grep
으로 -F
(그래서 당신은 단지 대체 할 플래그 fgrep -wq
와 함께 위 grep -Fwq
).
shopt -s nocasematch
당신이 검색은 대소 문자를 구분하려는 경우 도움이 될 수 있습니다.