bash에서 MySQL에서 반환 된 변수를 확인하는 방법은 무엇입니까?


2

bash에서 MySQL을 사용하여 저장 프로 시저를 실행해야합니다. 저장 프로 시저는 변수를 반환하며 bash에서 변수 값을 확인하여 변수를 표시해야합니다. 변수를 직접 반향하면 값이 올바르게 표시되지만을 사용하여 값을 확인 if하면 if조건이 충족되지 않으며 다음과 같은 경우 '예'가 표시되지 않습니다.

일을 단순화하기 위해 다음과 같이 bash 파일을 단순화했습니다.

result=$(mysql -h localhost -u$MYSQL_USER -p$MYSQL_PASSWORD -s -e "set @myVarible = 'YES';select @myVarible" $MYSQL_DATABASE)

if [[ $result == 'YES' ]] ; then
    echo YES
fi

의 출력 echo -n "$result" | od -ctx1

0000000   Y   E   S  \r
         59  45  53  0d
0000004

1
;이전을 추가하십시오 fi.
Cyrus

당신 : 그냥 우리가 분명히있어 너무 result=$(mysql …)명령이 작동, 및 echo $result출력 YES하지만, if … fi명령은 아무것도 출력하지 않습니다? 합니까 echo $result출력 YES또는 'YES'? $result큰 따옴표 를 넣으면 어떻게됩니까 (예 :) echo "$result"?
G-Man

고마워 사이러스, 그러나 같은 일을합니다.
Victor

1
if [[ $result =~ YES ]] ; then
Cyrus

1
의 게시물 출력 echo -n "$result" | hexdump -C.
Cyrus

답변:


0

의 결과는 변수가 끝에 캐리지 리턴이 붙어 echo -n "$result" | od -ctx1있음 을 보여줍니다 result. (이것은으로 표시됩니다 \r0dod -ctx1출력.) 지금까지 사람에 관한 한, 이것은 단지 다른 문자이며, 일치하지 않는 YES것보다 더 이상 YESK또는 YESS것. 문제의 가장 좋은 해결책 mysql은 캐리지 리턴을 출력하지 않도록 명령 을 변경하는 것 입니다. 그러나 나는 그것을하는 방법을 모른다. 결과를 쉘에 넣은 후에 결과를 수정하는 방법을 알고있다.

당신의 mysql명령 후에

result="${result%$'\r'}"

구조

$ { variable_name % 문자열 }

(명확하게하기 위해 공백이 추가 된 경우) 문자열이 끝에서 제거 된 상태에서 변수 값으로 확장됩니다. 예를 들어, $vehicle이다 carriage, 다음 ${vehicle%riage}입니다 car.

$ ' 문자열 '

과 동일 처럼, 이스케이프 시퀀스를 포함 할 수있는 문자열을 제외하고 (인용 된 문자열) 에 대한 및 캐리지 리턴합니다. 따라서 끝에서 캐리지 리턴이 제거 된 값입니다 . 이제와 같은 코드로 테스트 할 수 있습니다 .'string'\tTab\r${result%$'\r'}$result[[ $result == 'YES' ]]


도움을 주셔서 대단히 감사합니다. 당신이 그것을 설명하는 방식은 훌륭하고 매우 인상적입니다.
Victor

이 답변이 당신에게 효과가 있습니까? 그렇다면 확인 표시를 클릭하여“수락”하십시오. ( 누군가가 내 질문에 대답 할 때 어떻게해야합니까? )
G-Man
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.