case "$1","$name" in
-py | --python | --python3,*) if [[ "$name" =~ \..+$ ]]; then
그것은 사물을 포착하지 못합니다. 실제로는 다음과 같은 것을 포착해야 합니다...
USERNAME@HOSTNAME:~$ myscript --python surfer
재미있는 점: 다중 모드 조건을 다음과 같이 단순화합니다.
--python,*) if [[ "$name" =~ \..+$ ]]; then
효과가있다! 매우 반복적인 전경으로 인해 이 섹션은 3번 배치해야 했습니다. 첫 번째는 for -py
, 다음은 for --python
, 마지막으로 --python3
모든 패턴을 캡처하기 위한 것입니다.
하지만 다른 점은 - 그 반대입니다.
case "$1" in
-py | --python | --python3) if [[ ! "$name" =~ \.py$ ]]; then
아주 좋고 효과적입니다! 따라서 이는 다중 패턴 구문이 올바르지 않을 수 있으며 공백을 제거하거나 3개 패턴 모두의 합계 주위에 있는 모든 종류의 괄호를 첫 번째 OR 두 번째 OR 세 번째 패턴이 캡처되어야 하는 그룹으로 해석해야 할 수 있다는 내 가설에 반하는 것입니다. .
즉, GNU bash 버전 4.3에서는 "$name"과 같은 조건 외에 다중 모드와 두 번째 조건을 모두 가질 수 없다는 인상을 받았습니다. 이것이 가능한가? 아니면 이것을 달성하려고 시도하는 동안 실수를 하고 있습니까?
답변1
절의 개체가 case
올바르게 일치해야 합니다.
case "$1","$name" in
-py | --python | --python3,*) if [[ "$name" =~ \..+$ ]]; then
~해야 한다
case "$1","$name" in
-py,* | --python,* | --python3,*) if [[ "$name" =~ \..+$ ]]; then
그러나 이것은 아마도 다음과 같이 덜 반복하여 더 명확하게 표현될 수 있습니다.
if [[ "$name" =~ \..+$ ]]; then
case "$1" in
-py | --python | --python3)
do_stuff
;;
esac
fi