文字列形式でスペースで区切られた2つの数値を返す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
そこに2つの質問があります。まず、使用中のシェルは配列をサポートしません。おそらく.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