Si inner.sh
est
#...
echo first
echo second
echo third
Et outer.sh
est
var=`./inner.sh`
# only wants to use "first"...
Comment var
doit-il être séparé par des espaces ?
Si inner.sh
est
#...
echo first
echo second
echo third
Et outer.sh
est
var=`./inner.sh`
# only wants to use "first"...
Comment var
doit-il être séparé par des espaces ?
Essayez ça :
var=($(./inner.sh))
# And then test the array with:
echo ${var[0]}
echo ${var[1]}
echo ${var[2]}
Sortie :
first
second
third
Explication :
var=(first second third)
par exemple.$(./inner.sh)
exécute le inner.sh
script, qui imprime first
, second
et third
sur des lignes séparées. Puisque nous n'avons pas mis de guillemets autour de $(...)
ils sont regroupés sur la même ligne, mais séparés par des espaces, ce qui donne le résultat décrit dans le point précédent.N'oubliez pas la fonction intégrée mapfile
. C'est certainement le plus efficace dans votre cas : Si vous voulez faire passer le fichier entier dans un tableau, dont les champs seront les lignes sorties par ./inner.sh
, faire
mapfile -t array < <(./inner.sh)
Vous aurez alors la première ligne dans ${array[0]}
etc...
Pour plus d'informations sur ce module et toutes les options possibles :
help mapfile
Si vous avez juste besoin de la première ligne dans une variable appelée firstline
, faire
read -r firstline < <(./inner.sh)
Ce sont certainement les moyens les plus efficaces !
Ce petit repère va le prouver :
$ time mapfile -t array < <(for i in {0..100000}; do echo "fdjsakfjds$i"; done)
real 0m1.514s
user 0m1.492s
sys 0m0.560s
$ time array=( $(for i in {0..100000}; do echo "fdjsakfjds$i"; done) )
real 0m2.045s
user 0m1.844s
sys 0m0.308s
Si vous voulez seulement le premier mot (avec le délimiteur d'espace) de la première ligne produite par ./inner.sh
le moyen le plus efficace est
read firstword _ < <(./inner.sh)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.