Je suis un débutant à Bourne shell et je veux faire une simple simulation de tableau. Cela fonctionne:Comment passer une variable shell à awk dans Bourne shell?
COLORS='FF0000 0000FF 00FF00'
i=2
color=$(echo ${COLORS} | awk '{print $2}')
echo "color selected: $color"
Ce que je veux faire est de passer $i
au lieu du paramètre $2
fixe en version imprimée (ce sera ensuite utilisé dans une boucle). J'ai passé des heures à trouver la bonne combinaison de guillemets simples et doubles pour le faire, pas de chance.
Le plus proche je suis arrivé est
color=$("echo ${COLORS} | awk '{print "$"${i}}'")
Le résultat de l'exécution est:
+ COLORS=FF0000 0000FF 00FF00
+ i=2
+ echo FF0000 0000FF 00FF00 | awk '{print $2}'
./tempgraph.sh: ./tempgraph.sh: 37: echo FF0000 0000FF 00FF00 | awk '{print $2}': not found
+ color=
+ echo color selected:
color selected:
Toute aide est appréciée.
Merci! Cela fonctionne bien, même si je ne suis pas sûr de mieux comprendre les citations. On pourrait penser que les guillemets sont mangés par la coquille après l'expansion des choses, mais il semble qu'ils sont également passés à awk. – Arthur
Ils sont * mangés par le shell, mais les guillemets simples le sont aussi. Les deux entourent une chaîne. Par exemple, habituellement 'foo a b' passe' a' comme premier argument de 'foo', et' b' comme deuxième argument. Mais avec 'foo" a b "' le shell passe 'a b' comme unique argument de' foo'. La grande différence entre les guillemets simples et doubles est qu'avec les guillemets doubles, vous pouvez "incorporer" d'autres choses, comme des variables: si vous passez "$ i" comme argument, la chaîne "$ i" est effectivement passée. Mais avec '" $ i "', le contenu de la variable 'i' est passé. – DarkDust