Je veux ranger un script avec de longues commands, de sorte que par exemple:
{ somecheck || somecomand "reallyreallyreallyreallyreallyreallylongssortingng" } &> /dev/null &
devient quelque chose comme:
{ somecheck || \ somecomand "reallyreally" \ "reallyreally" \ "reallyreally" \ "longssortingng" \ } &> /dev/null &
Mais je suis inquiet au sujet de la division des mots. Pour l'éviter, je pense à ceci:
{ somecheck || \ somecomand "$(echo \ "reallyreally" \ "reallyreally" \ "reallyreally" \ "longssortingng" \ )" \ } &> /dev/null &
Est-ce que quelqu'un connaît une autre façon de faire des strings multilignes dans bash / zsh? J'ai du mal à googler cette information, et je pense que cela va signifier au less trois process (le script, le bloc d'arrière-plan et le sous-shell de substitution de command); Peut-être qu'il y a un meilleur moyen?
Merci d'avance!
L'utilisation de lignes continues comme celle-ci ajoute des espaces dans votre string: la séquence backslash-newline-whitespace
sera remplacée par un espace unique.
L'utilisation de variables améliorera grandement la lisibilité:
url="reallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallyreallylongssortingng" { somecheck || somecomand "$url" } &> /dev/null &
Vous pouvez toujours décomposer cela en sous-strings, en utilisant un tableau
parts=( "reallyreallyreallyreally" "reallyreallyreallyreally" "reallyreallyreallyreally" "reallyreallyreallyreally" "longssortingng" ) whole=$(IFS=; echo "${parts[*]}")
mais est-ce important de split les strings littérales count tenu de la complexité ajoutée?
Eh bien, vous pouvez le simplifier légèrement pour:
$ [ -f /dev/null ] || sed 's/a/A/g' <(echo "thisis""avery"\ "long""ssortingng"\ "Ihave""separated"\ "into""smaller"\ "subssortingngs") thisisAverylongssortingngIhAvesepArAtedintosmAllersubssortingngs
Le point important est de ne pas avoir d'espace supplémentaire dans la string d'input, donc pas d'espace autour de la \
.
La suggestion de Glenn d'utiliser des variables est à la fois plus jolie et plus simple, allez-y.
Je suggère une approche à mi-path entre les deux suggestions de Glenn: utiliser une variable (simple, scalaire), mais casser sa définition en plusieurs lignes:
myword="super" myword="${myword}cali" myword="${myword}fragil" myword="${myword}istic" myword="${myword}expi" myword="${myword}ali" myword="${myword}docious"