Les coquilles autres que Bash et Zsh soutiennent-elles la citation ANSI-C? par exemple $ 'ssortingng'

J'ai un script shell qui utilise ce qui suit pour imprimer une coche verte dans sa sortie:

col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" 

Après avoir lu la citation ANSI-C de Bash, je me suis rendu count que je pourrais l'utiliser lors de la définition de mes variables de couleur et supprimer le drapeau -e de mon écho .

 col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" 

Cela semble attrayant, car cela signifie que le message s'imprime correctement, qu'il soit transmis à l' écho embedded de Bash ou à l'utilitaire /bin/echo externe (je suis sur macOS).

Mais est-ce que cela rend le script less portable? Je sais que Bash et Zsh soutiennent ce style de citation, mais je ne suis pas sûr des autres.

$'…' est une fonction ksh93 qui est aussi présente dans zsh et bash et dans certaines versions de BusyBox sh (BusyBox ash construit avec ENABLE_ASH_BASH_COMPAT ). Il n'est pas présent en plaine. Les shells communs qui ne l'ont pas incluent le tiret (qui est /bin/sh sur Ubuntu entre autres) et quelques builds de BusyBox.

Une méthode portable pour get une barre oblique inversée et une barre oblique inverse octale en tant que caractères de contrôle consiste à utiliser printf . Il est présent sur tous les systèmes compatibles POSIX.

 esc=$(printf '\033') col_green="${esc}[32;01m" 

Notez que \e n'est pas portable. Il est supporté par de nombreuses implémentations d' printf mais pas par celui en tiret. Utilisez plutôt le code octal.