이것은:
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_2
iotools
아래와 같이 쓰는 방법이 있나요?
[ $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
$