배열에 지정된 요소가 있는지 여부를 테스트하는 방법이 있습니까?bash의 배열 연산자
예를 들어, 같은 : 트릭을 할 것입니다 루프
array=(one two three)
if [ "one" in ${array} ]; then
...
fi
배열에 지정된 요소가 있는지 여부를 테스트하는 방법이 있습니까?bash의 배열 연산자
예를 들어, 같은 : 트릭을 할 것입니다 루프
array=(one two three)
if [ "one" in ${array} ]; then
...
fi
를했다.
array=(one two three)
for i in "${array[@]}"; do
if [[ "$i" = "one" ]]; then
...
break
fi
done
array="one two three"
if [ $(echo "$array" | grep one | wc -l) -gt 0 ] ;
then echo yes;
fi
그 추한 있다면, 당신은 떨어져 함수에서 숨길 수 있습니다.
단어 경계를위한 egrep, egrep "\ bone \ b"'를 사용하면 array = "onex two three"가 'one'에서 일치하지 않게됩니다. ''echo "$ array"| egrep "\ bone \ b"&& echo hit || 에코 미스가 충분하다 - wc-l과 -gt0는 매우 거친다. –
테스트 ('[') 필요 없음. 그냥 grep의 반환 값을 사용하십시오. –
방금 요소가 배열에 있는지 여부를 확인하려는 경우, 다른 방법
case "${array[@]/one/}" in
"${array[@]}") echo "not in there";;
*) echo "found ";;
esac
[이 답변] (http://stackoverflow.com/a/5853138/2533433)과 동일한 문제가 없습니까? 예 : '정직한'에코도 '찾았습니까?' 'foo = (정직한 oneman); echo "$ {foo [@]/one /}"'는''hst man'을 제공하므로 솔루션과 함께 "found"를 반환합니다. – Izzy
이 시도 :
array=(one two three)
if [[ "${array[*]}" =~ "one" ]]; then
echo "'one' is found"
fi
배열이''array = (scone honest)' '가 아니라면' '요소' '를 포함 할 수는 없지만'= ~'연산자와 일치해야합니다. –
@Jonathan oops, 네 말이 맞아. 그럼 [@ 프랭크의 대답] (http://stackoverflow.com/questions/5852446/in-array-operator-in-bash/5852473#5852473)에 투표합니다. – pepoluan
이 문제를 * 일반적으로 해결하지는 않지만 대부분의 경우 각 배열 요소가 하나의 단어로만 구성된 경우 유용 할 수 있습니다. regexp (right-site)'= ~ "\ bone \ b" '전체 단어 만 일치시킵니다. 나는 단순함을 좋아한다! – Izzy
내의 .bashrc 파일의 기능을 '포함'을 가지고 :
:contains()
{
param=$1;
shift;
for elem in "[email protected]";
do
[[ "$param" = "$elem" ]] && return 0;
done;
return 1
}
그것은 배열 잘 작동 6,
contains on $array && echo hit || echo miss
miss
contains one $array && echo hit || echo miss
hit
contains onex $array && echo hit || echo miss
miss
그러나 배열이 필요하지 않습니다
if echo ${array[@]} | grep -qw one; then
# "one" is in the array
...
fi
가 (모두
-q
및
-w
비표준 옵션은 grep을하는 것을 참고 :이 대한 GREP을 사용하여 좋아
contains one four two one zero && echo hit || echo miss
hit
-w
을 전체 단어로만 작동하도록 지시하고 -q
("quiet")은 모든 출력을 억제합니다.
요소가 단일 단어 (예제에있는 것처럼) 인 경우에만 작동합니다. 'array = ("one man" "two horses") 요소에서 "one"요소를 검사 할 때 잘못 사용하면 ("one"은 첫 번째 요소의 일부인 단어 *이므로) , 그것은 (독립적 인 요소로서) 아니지만. – Izzy
In_array() {
local NEEDLE="$1"
local ELEMENT
shift
for ELEMENT; do
if [ "$ELEMENT" == "$NEEDLE" ]; then
return 0
fi
done
return 1
}
declare -a ARRAY=("elem1" "elem2" "elem3")
if In_array "elem1" "${ARRAY[@]}"; then
...
위의 멋지고 우아한 버전입니다.
SO Frank에 오신 것을 환영합니다. 위대한 첫 번째 대답. – John