JavaScript에는 이를 달성하는 기능이 있습니다.
'world'.startsWith('w')
true
쉘을 사용하여 이를 어떻게 테스트할 수 있습니까? 나는 이 코드를 가지고 있습니다 :
if [ world = w ]
then
echo true
else
echo false
fi
그러나 평등을 테스트하기 때문에 실패합니다. 저는 내장 기능을 사용하는 것을 선호하지만 이 페이지의 모든 유틸리티를 사용할 수 있습니다.
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
답변1
쉘이 bash인 경우: 이중 괄호 안에 있는 == 연산자의 오른쪽은 완전히 인용되지 않는 한 패턴입니다.
if [[ world == w* ]]; then
echo true
else
echo false
fi
또는 더 간결하게: [[ world == w* ]] && echo true || echo false
[*]
bash를 특별히 타겟팅하지 않는 경우: 패턴 일치를 위한 사례 설명 사용
case "world" in
w*) echo true ;;
*) echo false ;;
esac
[*] 하지만 양식에 주의해야 A && B || C
합니다 C
.누구나실패한또는B는 실패했습니다. 이 if A; then B; else C; fi
양식은오직A가 실패하면 C를 실행합니다.
답변2
$str
변수를 다음 값으로 설정합니다(여기에서는 로 설정함 world
).
str=world
그 다음에:
if [ -n "${str%%w*}" ]
then
echo false
else
echo true
fi
w*
의 시작 부분부터 패턴을 적극적으로 제거합니다$str
.w*
일치 항목w
뒤에는 임의 개수의 문자가 나오므로 가능하면 전체 문자열과 일치합니다.- 남은 것이 있으면
$str
시작하지 마십시오w
.
또는:
if [ "$str" = "${str#w}" ]
then
echo false
else
echo true
fi
w
가능하다면 제거하십시오$str
.- 그것과 비교해보세요
$str
. - 동일하면(즉, 삭제가 아무 작업도 수행하지 않음)
$str
로 시작하지 않습니다w
.
답변3
sh
표준 구문은 case
다음과 같은 구문입니다.
string=world
start=w
case $string in
("$start"*) printf '%s\n' "$string starts with $start";;
(*) printf '%s\n' "$string does not start with $start";;
esac
와일드카드가 포함된 경우 따옴표 가 $start
필요합니다. $start
예를 들어, start='*'
포함 여부에 관계없이 $start*
항상 일치합니다. [[ $string = "$start"* ]]
ksh/bash도 마찬가지입니다.