2014-10-21 2 views
2

bash에서 문장이 pangram인지 테스트하려고합니다. 문자열에 문자 bash가 포함되어 있습니다.

read sentence 
if [[ "$sentence" == [Aa] && [Bb] && [Cc] && [Dd] && [Ee] && [Ff] && [Gg] && [Hh] && [Ii] && [Jj] && [Kk] && [Ll] && [Mm] && [Nn] && [Oo] && [Pp] && [Qq] && [Rr] && [Ss] && [Tt] && [Uu] && [Vv] && [Ww] && [Xx] && [Yy] && [Zz] ]]; then 
echo "pangram" 
else 
echo "not pangram" 
fi 

내가 지금까지 가지고있는 코드, 그리고 내가 갖는 모든 "not pangram"의 출력이다. 누구든지 내 코드에 어떤 문제가 있는지 알고 있습니까?

내가 the code from a previous question of mine.

+0

정규 표현식을 사용하려고 시도하고 있는가? 스크립트에서 정규 표현식을 테스트하는 부분은 무엇입니까? –

+0

무엇을 의미합니까? – Quill

+0

'=='연산자는 정규식에 아무 것도하지 않습니다. 정규식 일치 (bash에서)를 수행하는 연산자는'= ~'입니다. 하지만 정규 표현식을'&&'와 결합 할 수는 없습니다. –

답변

0

귀하의 구문을 조작하려고했던 거의 맞아,하지만 조금 더 반복을 필요로한다. 다음과 같은 것이 필요합니다.

[[ "$sentence" =~ [Aa] && "$sentence" =~ [Bb] && "$sentence" =~ [Cc] && ... ]] 

의심 할 여지없이 더 간결한 방법이 있습니다.

0

일반적인 * nix 명령을 사용할 수 있습니까? 아니면 순수한 bash 작업 및 내장으로 제한됩니까? 정렬이 허용되는 경우

, 그럼 내가 할 줄 :

#!/bin/bash 

# Simple pangram tester. 
# Doesn't handle non-alphabetic chars except space. 

# Written by PM 2Ring 2014.10.21 

is_pangram() 
{ 
    count=$(echo -n ${1// /}|(while read -n 1 a;do echo $a;done)|sort -fu|wc -l) 
    [[ $count -eq 26 ]] 
} 

test_pangram() 
{ 
    if is_pangram "$1" 
     then echo "'$1' is a pangram." 
     else echo "'$1' is not a pangram." 
    fi 
} 

teststrings=(
    "A quick brown fox jumps over the lazy dog" 
    "This is a test" 
    "Cwm fjord bank glyphs vext quiz" 
    "Is not a pangram" 
) 

for s in "${teststrings[@]}" 
do 
    test_pangram "$s" 
done 
2

팬 그램을 테스트하기위한 더 순수 배쉬 방법 (함수로 작성) 될 것이다 :

is_pangram() { 
    local l=${1,,} i 
    for i in {a..z}; do 
     [[ $l = *$i* ]] || return 1 
    done 
    return 0 
} 

이를 함수는 먼저 인수를 소문자로 변환합니다. ${1,,}의 확장은 $1이 소문자로 변환 된 것입니다. 이 값을 로컬 변수 l에 저장합니다. 그런 다음 for i in {a..z}을 사용하여 소문자 알파벳을 반복하고 $l에 문자가 들어 있는지 확인하기 위해 glob (이 경우 잔인한 정규 표현식 대신)을 사용합니다.

그 다음을 시도해보십시오

$ if is_pangram "Cwm fjord bank glyphs vext quiz"; then echo "it's a pangram"; else echo "not a pangram"; fi 
it's a pangram 
$ if is_pangram "the horse jumps over the fence"; then echo "it's a pangram"; else echo "not a pangram"; fi 
not a pangram 
관련 문제