J'ai un appel avec une jolie liste d'arguments dans mon script shell: ne peut pas insérer des commentaires dans cet appel multiligne, puis-je? p> Par exemple, disons comment puis-je commenter le Peu importe ce que j'essaie, le grevoir - une ligne à bascule en option code>?
Comment puis-je ajouter un # dans la commande triée code> Commentaire après
$ Arguments code>? P>
# code > Symbole Shadows Line Suite Backslash
\ code> ou vice versa. Tout conseiller? P> p>
3 Réponses :
foo-command $( # hello printf --important-argument $ONE # free as a bird printf --indispensable-flag $ENABLED # to comment anywhere we wish printf --an-optional-toggle "will probably be commented out some day" printf $ARGUMENTS printf $MORE_ARGUMENTS ) It's not perfect: echoing -n is hard because echo interprets it; quotes may be disappeared when you would prefer to keep them, etc. In fact as commenters say below, the quoted string will get mangled; maybe you can work around that, but other answers here are better if you have Bash.
Si l'argument sur le commentaire facultatif contient réellement des espaces, cela ne fonctionnera pas.
Cela peut être amélioré. printf code> au lieu de
echo code> atténuera certains problèmes, y compris
-n code> (et d'autres) interprétation. La substitution de commande peut être inlinée et se débarrasser d'une définition de fonction supplémentaire.
Vous avez raison, la réponse de Cheppner est une meilleure version meilleure de ce que j'ai fait ici. Tout grêle le maître Bash.
@Johnzwinck, remonter le moral! Votre solution a un avantage d'être portable i>, dans le sens de la compatibilité avec la nature sh code>.
@ulidtko: Merci. Je ne voudrais pas simplement sh code> sur mon pire ennemi. Je pense qu'il est mieux que
ed code>. :)
@Lidtko La portabilité n'a pas d'importance si ce n'est pas correct. Cependant, je pensais que je me suis souvenu de quelqu'un qui me disait que des tableaux peuvent être ajoutés à la spécification POSIX. Il n'y a vraiment pas une alternative portable à leur utilisation dans un cas comme celle-ci, à court d'une construction vraiment horrible impliquant eval code>.
(Hm, ce pourrait être une citation de style ansi $ '' ... ' code> que j'ai entendu être sous délibération. Mais les tableaux seraient utiles aussi.)
Notez que printf (1) code> essaie d'élargir son premier argument, donc à l'aide de la LIMAINE
PrintF $ Arguments code> n'est pas une très bonne idée.
printf "% s \ n" $ arguments code> est meilleur.
Non, mais vous pouvez stocker les arguments dans un tableau à la place. Cela vous permet de commenter une ligne individuelle et d'inclure des commentaires entrecoupés.
args=( --important-argument "$ONE" --indispensable-flag "$ENABLED" # --an-optional-toggle "will probably be commented out some day" "${ARGUMENTS[@]}" # in sorted order "${MORE_ARGUMENTS[@]}" )
+1 Utilisation des matrices Bash est la bonne façon que d'utiliser une ligne de commande multiligne longue.
Comme une note de côté: il est strictement une approche dépendant de Bash. Les tableaux ne fonctionnent pas dans des coquilles plus âgés a.k.a « sh code> », qui peut être d'une importance pour quelqu'un.
Si vous êtes préoccupé par la portabilité, taguer votre question sh code> au lieu de
bash code>.
Il convient probablement de noter qu'utiliser un tableau avec "$ {arguments [@]}" code> au lieu d'une plaine, non note
$ Arguments code> évite l'expansion indésirable de la valeur.
Essayez backtick commentaire bidouille em> comme proposé dans une réponse antérieure à la même question dans votre cas, ce serait:. p> foo-command \
--important-argument $ONE \
--indispensable-flag $ENABLED \
`#--an-optional-toggle "will probably be commented out some day"` \
$ARGUMENTS \
$MORE_ARGUMENTS
Veillez à ce que la ligne a commenté ne se contient pas de substitutions de commandes, car ils seront encore élargis.