GNU/Linux >> Tutoriels Linux >  >> Linux

Lors de l'utilisation de printf, comment échapper les caractères spéciaux dans le script shell?

Pour le bénéfice des personnes qui sont arrivées ici en cliquant sur le premier résultat de recherche après avoir google "bash printf échappé", la bonne façon d'utiliser printf pour générer du texte échappé par bash est :

printf " %q" "here is" "a few\n" "tests"

Qui affiche (sans retour à la ligne) :

 here\ is a\ few\\n tests

Essayez

printf "%s\n" "$string"

Voir printf(1)


Vous pouvez utiliser $' ' pour encadrer les sauts de ligne et les caractères de tabulation, puis un simple echo suffira :

#!/bin/bash 

get_lines() {    
   local string
   string+='The path to K:\Users\ca, this is good'
   string+=$'\n'
   string+='The second line'
   string+=$'\t'
   string+='123'
   string+=$'\n'
   string+='It also has to be 100% nice than %99'

   echo "$string"
}

get_lines

J'ai également apporté quelques autres modifications mineures à votre script. En plus de mettre votre FUNCTION_NAME en minuscules, j'ai également utilisé la syntaxe de fonction plus largement compatible. Dans ce cas, il n'y a pas beaucoup d'avantages (car $' ' les chaînes sont de toute façon une extension bash) mais il n'y a aucune raison d'utiliser le function func() syntaxe pour autant que je sache. En outre, la portée de string peut tout aussi bien être local à la fonction dans laquelle il est utilisé, donc j'ai changé cela aussi.

Sortie :

The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99

Puis-je remarquer que "man printf" montre clairement qu'un caractère "%" doit être échappé au moyen d'un autre "%" donc printf "%%" donne un seul "%"


Linux
  1. Comment échapper aux guillemets dans Shell ?

  2. Comment gérer les commutateurs dans un script shell ?

  3. Comment écrire des caractères non ASCII en utilisant echo ?

  4. Modifier le script shell pendant son exécution

  5. Comment insérer une nouvelle ligne dans le script shell Linux ?

Comment utiliser des variables dans les scripts Shell

Comment créer des scripts shell

Comment exécuter une commande dans un script shell ?

Afficher les caractères spéciaux sous Unix lors de l'utilisation de la commande "moins"

Comment exécuter un script shell au démarrage

Comment compter le nombre d'onglets dans chaque ligne à l'aide d'un script shell ?