Bash에서 비교 연산자의 왼쪽에 두 개의 피연산자를 사용하는 방법

Bash에서 비교 연산자의 왼쪽에 두 개의 피연산자를 사용하는 방법

이것은:

3.8.13-68.3.4.el6uek.x86_64 #2 SMP Tue Jul 14 15:03:36 PDT 2015 x86_64 x86_64 x86_64 GNU/Linux

bash --version
    GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

나는 다음 구문에 익숙합니다.

[ $VAR = "iotools" ] || [ $VAR_2 = "iotools" ]

value 를 $VAR포함해야 하거나 value 를 포함해야 합니다 .iotools$VAR_2iotools

아래와 같이 쓰는 방법이 있나요?

[ $VAR||$VAR_2 = "iotools" ]

아이디어는 코드가 차지하는 공간을 절약하고 두 번째 대괄호 안의 추가 코드를 제거하는 것입니다.

답변1

아니요, 비교의 왼쪽 부분을 줄일 수 없습니다. 그러나 오른쪽의 패턴을 사용할 수 있습니다.

[[ iotools == @("$VAR"|"$VAR_2") ]]

이 기능이 작동하려면 [[ ... ]]대신 사용해야 합니다 . [ ... ]바라보다패턴 매칭더 알아보기 man bash.

일치를 방지하려면 변수를 따옴표로 묶어야 합니다 VAR='a|iotools|b'.

답변2

Bash를 사용하고 있으므로 다음 두 가지 개념을 사용하여 이를 수행할 수 있습니다.

  • 비슷한 이름을 가진 여러 변수를 나열하는 방법이 있습니다.

    VAR=iotools
    VAR_2=tools2
    VAR_3=othertools
    
    printf '<%s> ' "${!VAR@}"
    

    다음을 인쇄합니다:

    <VAR> <VAR_2> <VAR_3>
    
  • 이는 간접적으로 수행할 수도 있습니다 ${!var}(var는 $VAR과 다른 변수입니다).

    for var in "${!VAR@}"; do
        printf '<%s> '  "${!var}"
    done
    

    다음을 인쇄합니다:

    <iotools> <tools2> <othertools>
    

모두 합하면 다음과 같습니다.

#!/bin/bash

VAR=iotools
VAR_2=tools2
VAR_3=othertools

testvalue="$1"

for var in "${!VAR@}"; do
    if [[ ${!var} == $testvalue ]]; then
        echo "Some value matched"
        break
    fi
done

호출은 다음과 같습니다.

$ script iotools
Some value matched
$ script notool
$

관련 정보