Comment puis-je commenter chaque ligne des lignes suivantes d'un script?
cat ${MYSQLDUMP} | \
sed '1d' | \
tr ",;" "\n" | \
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Si j'essaye d'ajouter un commentaire comme:
cat ${MYSQLDUMP} | \ # Output MYSQLDUMP File
Je reçois:
#: not found
Est-il possible de commenter ici?
Réponses:
Cela entraînera des frais généraux, mais techniquement, cela répond à votre question:
Et pour les pipelines en particulier, il existe une solution propre sans frais généraux:
Voir la question de débordement de pile Comment insérer un commentaire de ligne pour une commande multiligne .
la source
La barre oblique inverse de fin doit être le dernier caractère de la ligne pour qu'elle soit interprétée comme une commande de continuation. Aucun commentaire ou même espace blanc n'est autorisé après.
Vous devriez pouvoir mettre des lignes de commentaires entre vos commandes
la source
|
. Si vous essayezcat file1\<newline>#comment<newline>file2
, vous verrez que vous n'obtenez pascat file1 file2
, mais plutôtcat file1; file2
.cat file1 | # comment<newline>sort
fonctionne très bien. Il en va de mêmecat file1 && # comment<newline>echo foo
. Ainsi, les commentaires peuvent être inclus après|
ou&&
ou||
, mais pas après `\` ou au milieu d'une commande.Comme l'a souligné DigitalRoss, la barre oblique inverse de fin n'est pas nécessaire lorsque la ligne se termine
|
. Et vous pouvez mettre des commentaires sur une ligne suivant a|
:la source
La barre oblique inverse échappe le #, l'interprétant comme son caractère littéral au lieu d'un caractère de commentaire.
la source
$IFS
hacks de commentairesCe hack utilise l' expansion des paramètres sur
$IFS
, qui est utilisé pour séparer les mots dans les commandes:De même:
En utilisant cela, vous pouvez mettre un commentaire sur une ligne de commande avec contination:
mais le commentaire devra être avant la
\
suite.Notez que l'expansion des paramètres est effectuée à l'intérieur du commentaire:
Exception rare
Le seul cas rare d'échec est s'il a
$IFS
déjà commencé avec le texte exact qui est supprimé via l'expansion (c'est-à-dire après le#
caractère):Notez que la finale
foobar
n'a pas d'espace, illustrant le problème.Comme
$IFS
ne contient que des espaces par défaut, il est extrêmement peu probable que vous rencontriez ce problème.Crédit commentaire de @ PJH qui a déclenché cette réponse.
la source
En plus des exemples de DigitalRoss, voici un autre formulaire que vous pouvez utiliser si vous préférez à la
$()
place des backticks`
Bien sûr, vous pouvez également utiliser la syntaxe deux-points avec des backticks:
Notes complémentaires
La raison
$(#comment)
ne fonctionne pas est parce qu'une fois qu'il voit le#
, il traite le reste de la ligne sous forme de commentaires, y compris les parenthèses de clôture:comment)
. Ainsi, les parenthèses ne sont jamais fermées.Les backticks analysent différemment et détectent le backtick de fermeture même après un
#
.la source
Voici un script bash qui combine les idées et les idiomes de plusieurs commentaires précédents pour fournir, avec des exemples, des commentaires en ligne ayant la forme générale
${__+ <comment text>}
.En particulier
<comment text>
peut être multiligne<comment text>
n'est pas étendu par paramètreIl y a une restriction sur le
<comment text>
, à savoir, les accolades'}'
et les parenthèses non équilibrées')'
doivent être protégées (c'est-à-dire'\}'
et'\)'
).Il y a une exigence sur l'environnement bash local:
__
doit être annuléTout autre nom de paramètre bash syntaxiquement valide servira à la place de
__
, à condition que le nom n'ait pas de valeur définie.Un exemple de script suit
la source