Bash 스크립트에서 Python 스크립트 반환 값에 액세스

Bash 스크립트에서 Python 스크립트 반환 값에 액세스

문자열 형식으로 공백으로 구분된 두 개의 숫자를 반환하는 python 스크립트(temp.py라는)가 있습니다. 예를 들어 출력은 "23.3 43.6"과 같습니다. bash 스크립트에서 이 값을 인쇄하려고 합니다. echo $OUTPUT을 통해 전체 출력 문자열을 인쇄할 수 있지만 개별 요소를 인쇄하려고 하면 잘못된 대체 오류가 발생합니다. 내가 뭘 잘못했나요?

#!/bin/bash
OUTPUT=$(python ./scripts/temp.py)
echo $OUTPUT # Prints normally "23.3 43.6 "
echo ${OUTPUT[0]} # error: bad substitution!

답변1

거기에 두 가지 질문이 있습니다. 첫째, 사용 중인 쉘은 배열을 지원하지 않습니다. 아마도 .shdash내 생각에는 거기에 bash shebang 라인이 있지만 스크립트를 호출하는 것입니다. 즉, sh script.sh시스템에 있는 모든 것에 의해 스크립트가 해석되고 있음을 의미합니다. sh예를 들어 dash(Debian 및 Ubuntu의 기본 설정 sh)에서는 다음을 얻습니다.

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
dash: 2: Bad substitution

그러나 Bash에서는 다음을 얻습니다.

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
23.3 43.6

다음 문제는 bash에서 실행하더라도 배열이 다음과 같이 작동하지 않는다는 것입니다.

$ out=$(echo 23.3 43.6 )
$ echo ${out[0]}
23.3 43.6
$ echo ${out[1]}   ## prints nothing but a newline since the variable is empty

$

Bash에서 배열을 얻으려면 요소를 대괄호 안에 넣어야 합니다:

$ out=( $(echo 23.3 43.6 ) )
$ echo ${out[0]}
23.3
$ echo ${out[1]}
43.6

관련 정보