Bash longue string, pas de mot de division?

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"