2016-12-22 24 views
0

私のbashスクリプトからpythonスクリプトを実行しています。 Pythonスクリプトは4行をstdoutに出力します。私はこれらの4行の出力を4つの異なる変数、つまり4つの要素を持つbashまたは1つの配列に格納したいと思います。bashのstdoutから配列を読み取る方法

私は標準出力に4行を参照byitself私は私のPythonスクリプトを実行すると:私はecho $yを行う時には、上記した後

OUTPUT="$(python my_script.py)" 

echo "${OUTPUT}" 

readarray -t y <<<"$OUTPUT" 

:私のbashスクリプトで

$ python my_script.py 
line1 
line2 
line3 
line4 

を私はこれをやりました最初の行の出力のみを表示します(line1)。

Pythonスクリプトの出力を4変数または配列として使用するにはどうすればよいですか?

+2

OUTPUT=($(python my_script.py)) echo "len of OUTPUT=${#OUTPUT[@]} and the data is:" ${OUTPUT[@]} echo "Second entry is=" ${OUTPUT[1]} 

... ...: 'マップファイル-t Y <<(Pythonのmy_script.pyは)'十分です。 '' printf '%s \ n "" $ {y [@]} "'または 'declare -p y'の配列を調べるために、配列' y'の内容をstdoutに出力するようになりました。 –

+0

@Anthony: 'readarray'や' maple'をサポートしていない 'bash'バージョンで' read'を使って私のロジックをチェックしてください! – Inian

答えて

2

は、配列の最初の要素です。 ${y[@]}はそれらのすべてを提供します。

echo "${y[@]}" 
+0

アレイの2番目の3番目のetc要素を個別に取得する方法はありますか? – Anthony

+0

$ {y [0]}は使えますか? – Anthony

+0

うん。 $ {y [1]} "'、 '" $ {y [2]} "'など –

-1

bashをプライマリパーサーとして使用しているのか、bashシャバンを持っていますか?これはshがこの素敵な配列の処理を持っていないためです...

しかし、なぜあなたは配列作成カッコでPythonスクリプトを実行するとbash配列を作成しないのですか?そしてジョンズの方法でそれらを印刷してください。あなたは中間変数は必要ありません

+0

なぜですか?それは壊れています:あなたのコマンドは、パス名の拡張とglobbingの対象です! –

+0

それは?どこが壊れていて、どの拡張ですか? – Hast

+0

単語の分割: 'output =($(echo hello world))'。パス名展開: 'output =($(echo '*'))'(空でないディレクトリから実行)。反例がたくさんあります。これらの問題を解決する既知の方法は、シェルに対抗して 'IFS'を変更し、' set -f'を使用することです。しかし 'mapfile' /' readarray'がより効率的にそれを行うので、本当に遅れています。さらに、それはOPが使用したものなので、なぜ元々使用されていたものより悪いものを示唆していますか? –

関連する問題