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'essaie d'ajouter un commentaire en disant " cat $ {MYSQLDUMP} |\#Output MYSQLDUMP File ", j'obtiens:
Supprimer: non trouvé
Est-il possible de commenter ici ou pas à cause de "| \
"?
Cela aura des frais généraux, mais techniquement, cela répond à votre question:
echo abc `#Put your comment here` \
def `#Another chance for a comment` \
xyz, etc.
Et pour les pipelines en particulier, il existe une solution propre, sans frais généraux:
echo abc | # Normal comment OK here
tr a-z A-Z | # Another normal comment OK here
sort | # The pipelines are automatically continued
uniq # Final comment
Voir la question relative au dépassement de capacité Comment insérer un commentaire de ligne pour une commande multiligne.
La barre oblique inverse de fin doit être le dernier caractère de la ligne pour être interprétée comme une commande de continuation. Aucun commentaire ou même des espaces ne sont autorisés après.
Vous devriez pouvoir insérer des lignes de commentaire entre vos commandes
# output MYSQLDUMP file
cat ${MYSQLDUMP} | \
# simplify the line
sed '/created_at/d' | \
# create some newlines
tr ",;" "\n" | \
# use some sed magic
sed -e 's/[asbi]:[0-9]*[:]*//g' -e '/^[{}]/d' -e 's/""//g' -e '/^"{/d' | \
# more magic
sed -n -e '/^"/p' -e '/^print_value$/,/^option_id$/p' | \
# even more magic
sed -e '/^option_id/d' -e '/^print_value/d' -e 's/^"\(.*\)"$/\1/' | \
tr "\n" "," | \
# I hate phone numbers in my output
sed -e 's/,\([0-9]*-[0-9]*-[0-9]*\)/\n\1/g' -e 's/,$//' | \
# one more sed call and then send it to the CSV file
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
Comme l'a souligné DigitalRoss, la barre oblique inverse de fin n'est pas nécessaire lorsque la ligne se termine par |
. Et vous pouvez mettre des commentaires sur une ligne après un |
:
cat ${MYSQLDUMP} | # Output MYSQLDUMP file
sed '1d' | # skip the top line
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/,$//' | # hate phone numbers
sed -e 's/^/"/g' -e 's/$/"/g' -e 's/,/","/g' >> ${CSV}
La barre oblique inverse échappe au # et l'interprète comme son caractère littéral au lieu d'un caractère de commentaire.
En plus des exemples de DigitalRoss, voici un autre formulaire que vous pouvez utiliser si vous préférez $()
à la place des backticks `
echo abc $(: comment) \
def $(: comment) \
xyz
Bien sûr, vous pouvez aussi utiliser la syntaxe du côlon avec des backticks:
echo abc `: comment` \
def `: comment` \
xyz
La raison pour laquelle $(#comment)
ne fonctionne pas est qu'une fois qu'il voit le #
, il traite le reste de la ligne comme des commentaires, y compris les parenthèses fermantes: comment)
. Donc, les parenthèses ne sont jamais fermées.
Les backticks analysent différemment et détecteront le backtick de fermeture même après un #
.
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 développé en paramètreIl existe une restriction au <comment text>
, à savoir que les accolades non équilibrées '}'
et les parenthèses ')'
doivent être protégées (c'est-à-dire, '\}'
et '\)'
).
Il existe une exigence sur l'environnement bash local:
__
doit être désactivéTout autre nom de paramètre bash syntaxiquement valide sera utilisé à la place de __
, à condition que le nom n'ait pas de valeur définie.
Un exemple de script suit
# provide bash inline comments having the form
# <code> ${__+ <comment>} <code>
# <code> ${__+ <multiline
# comment>} <code>
# utility routines that obviate "useless use of cat"
function bashcat { printf '%s\n' "$(</dev/stdin)"; }
function scat { 1>&2 bashcat; exit 1; }
# ensure that '__' is unset && remains unset
[[ -z ${__+x} ]] && # if '__' is unset
declare -r __ || # then ensure that '__' remains unset
scat <<EOF # else exit with an error
Error: the parameter __='${__}' is set, hence the
comment-idiom '\${__+ <comment text>}' will fail
EOF
${__+ (example of inline comments)
------------------------------------------------
the following inline comment-idiom is supported
<code> ${__+ <comment>} <code>
<code> ${__+ <multiline
comment>} <code>
(advisory) the parameter '__' must NOT be set;
even the null declaration __='' will fail
(advisory) protect unbalanced delimiters \} and \)
(advisory) NO parameter-expansion of <comment>
(advisory) NO subprocesses are spawned
(advisory) a functionally equivalent idiom is
<code> `# <comment>` <code>
<code> `# <multiline
comment>` <code>
however each comment spawns a bash subprocess
that inelegantly requires ~1ms of computation
------------------------------------------------}