문자열 형식으로 공백으로 구분된 두 개의 숫자를 반환하는 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
거기에 두 가지 질문이 있습니다. 첫째, 사용 중인 쉘은 배열을 지원하지 않습니다. 아마도 .sh
dash
내 생각에는 거기에 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