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 ?

Lennart Rolland
la source
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 --------------"
fra-san
la source