bash + 단어가 값 목록에 있는지 확인하는 방법

bash + 단어가 값 목록에 있는지 확인하는 방법

매개변수의 모든 값을 식별하는 방법 -var_general존재하다var_get

예를 들어

var_general="sdb sdc sdd sde sdf sdg"
var_get="sdb sdc sdd sde sdf sdg sdh sdi"

이 예에 따르면 정상 상태가 됩니다.

다른 예

var_general="sdb sdj sdd sde sdf sdg"
var_get="sdb sdc sdd sde sdf sdg sdh sdi"

상태가 실패로 표시됩니다(sdj가 var_get에 없기 때문에).

답변1

bash+comm+tr해결책:

var_general="sdb sdc sdd sde sdf sdg"
var_get="sdb sdc sdd sde sdf sdg sdh sdi"

if [[ $(comm -23 <(tr ' ' '\n' <<<"$var_general" | sort) <(tr ' ' '\n' <<<"$var_get" | sort)) ]]; then 
    echo "status: Fail"
else 
    echo "status: Ok"
fi

  • tr ' ' '\n' <<<"$var_general"-공백을 줄 바꿈/줄 바꿈으로 변환
  • comm -23 FILE1 FILE2- 파일을 비교하고 고유한 줄을 인쇄합니다 FILE1. 파일에 FILE1고유한 항목이 포함되어 있지 않으면 파일의 하위 집합으로 허용됩니다.FILE2

답변2

이 기능은 이 작업을 수행하기 위해 테스트에서 작동하고 있습니다.

are_in () {
    local match_list="$1"
    local compare_list="$2"
    until [[ -z "$match_list" ]]; do
        if ( grep -q  "$(awk '{print $1}' <<<"$match_list")" <<<"$compare_list" ); then
            match_list="$(awk '{$1=""; print $0}' <<<"$match_list")"
        else
            echo "Fail" && return 1
        fi
    done
    echo "Okay" && return 0
}

사용:

$ var_general="sdb sdc sdd sde sdf sdg"
$ var_get="sdb sdc sdd sde sdf sdg sdh sdi"
$ are_in "$var_general" "$var_get"; echo $?
Okay
0
$ var_general="sdb sdj sdd sde sdf sdg"
$ var_get="sdb sdc sdd sde sdf sdg sdh sdi"
$ are_in "$var_general" "$var_get"; echo $?
Fail
1

해당 기능이 없으면 본질적으로 다음과 같습니다.

t_var="$var_general"
until [[ -z "$t_var" ]]; do
    if ( grep -q  "$(awk '{print $1}' <<<"$t_var")" <<<"$var_get" ); then
        t_var="$(awk '{$1=""; print $0}' <<<"$t_var")"
    else
        echo "Fail" && return 1
    fi
done

답변3

awk를 사용하세요

awk -v b="ok" -v RS=' |\n' 'NR==FNR{a[$0];next}!($0 in a){b="ko";exit}END{print b}' <(echo $var_get)  <(echo $var_general)

답변4

안전하지 않은 방법(변수가 참조되지 않기 때문에)

comm -23 <(sort <(printf "%s\n" $var_general)) <(sort <(printf "%s\n" $var_get))

더 안전한 방법

comm -23 <(sort <(xargs -n1 <<< "$var_general")) <(sort <(xargs -n1 <<< "$var_get"))

관련 정보