Traits échappés (-) avec printf en bash


1

J'ai la ligne suivante:

printf "---- %.55s\n" "$1 --------------"

Lorsque je lance ceci sous bash, j'obtiens l'erreur suivante:

printf: -: option non valide printf: utilisation: printf [-v var] format   [arguments]

C'est parce que (je pense que) printf interprète la chaîne "----" comme le début d'un argument. J'ai essayé d'échapper à cela en utilisant "\" comme ceci:

printf "\---- %.55s\n" "$1 --------------"

Voici le résultat:

\---- content of $1 -------

Comme vous pouvez le voir, le "\" est devenu une partie de la sortie, ce qui n’est pas ce que je veux.

Donc la question est, comment puis-je persuader printf que je n'essaie pas de passer un long débat ?


Remplacer tout - dans la chaîne de format avec leur représentation octale (ici, \055 ) devrait marcher. Certes, ce n'est pas le plus propre. Un péché printf '\055\055\055\055\055 %.55s\n' "$1 --------------"
— fra-san

J'ai découvert peu de temps après cela, mettant juste un double trait d'union "-" avant que la chaîne réelle ne fonctionne.
— Lennart Rolland

Content de voir que ton problème est résolu. J'ajouterai quand même une réponse pour aider ceux qui finiront par rencontrer cela.
— fra-san

Réponses:


1

Pour éviter un argument commençant dans - interprété comme une option, vous avez plusieurs alternatives:

1) Déplacez les signes moins de la chaîne de format vers la chaîne d’argument, reflétant éventuellement la nouvelle longueur de la chaîne imprimée dans le champ. %.s spécificateur de format. Un péché:

$ printf "%.60s\n" "---- $1 --------------"

2) bash Les commandes intégrées acceptent -- en tant qu'option qui leur indique d'arrêter les options de traitement et de considérer tout ce qui suit comme des noms de fichiers et des arguments. Un péché:

$ printf -- "---- %.55s\n" "$1 --------------"

3) Vous pouvez remplacer les signes moins par leurs codes octaux. En fait, remplacer seulement le premier fonctionne, comme dans:

$ printf "\055--- %.55s\n" "$1 --------------"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.