당신은 특수 코드의 소스에 대한 링크를했다. 코드 아래에 주석을 찾습니다. 이 코드는 배열의 각 요소를 개별적으로 반복하지 않고 단순히 배열을 연결하고 "2"를 부분 문자열로 찾습니다. 정확히 "2"라는 단어가 배열의 요소인지 여부를 테스트하는 경우 바람직하지 않은 동작이 발생할 수 있습니다. @MartyMacGyver 2011 년 8 월 19 일 23시 21 분
또 다른 설명.
은 무슨 일이 일어나고 있는지 확인하기 위해 다음 명령을보십시오 (또는
set -x
사용) :
echo case "${leap_yrs[@]}" in *"${year}"*
if [[ "1852 1856 1860 1864 1868 1872 1876 1880 1884 1888 1892 1896 1900 1904 1908 1912 1916 1920 1924 1928 1932 1936 1940 1944 1948 1952 1956 1960 1964 1968 1972 1976 1980 1984 1988 1992 1996 2000 2004 2008" = *1900* ]]
then
echo "Found"
fi
if [[ ${leap_yrs[@]} = *1900* ]]
then
echo "Also found"
fi
당신이 당신의 쉘 if [[ ... ]]
를 지원하는지 확실하지 않은 경우, 당신은 더 많은 휴대용 케이스 구조를 사용할 수 있습니다.
어떻게 일치하는지 확인 했으므로 19 년도가 윤년이 될 수도 있음을 이해합니다. 더 안전한 방법은 :1852:1856:...:
과 같은 콜론으로 문자열을 만들고 *:${year}:*
과 일치시키는 것입니다.
각 개선 사항을 이해하기가 더 복잡해 집니까? 그냥 isLeapYear 함수를 만든다. (그러나 주제를 벗어나기).
편집 :
* *
은 와일드 카드 (모든 문자 문자열을 나타냄)입니다. p*m
은 pim, pam, program 및 pugliam과 일치합니다. *8*
은 4 6 8 10
과 일치하지만 5 7 9
과 일치하지 않습니다. 이 경우 하위 문자열로 읽을 수 있습니다. 1
이 1868 1872 1876
의 문자열이지만, :1:
이 :1868:1872:1876:
안녕 @Walter 감사의 하위 문자열이 아니기 때문에
나는, 콜론을 추가했다. 그런데 내 질문을 다시 말해야한다고 생각합니다. * *는 무엇을 의미합니까? 그들은 내가 찾고있는 하위 문자열을 분리합니까? 문자열을 정의 할 때 콜론의 의미는 무엇입니까? 감사합니다. – pugliam