Bonjour,

C’est normal avec l’affichage d’une variable contenant des LF. Ce serait la 
même chose avec un :
        A=$(ls)

Une piste tient dans la façon que vous utilisez pour afficher le résultat de la 
variable. En effet, un
        echo ${A}
comme vous le faite n’affichera pas la même chose qu’un :
        echo "${A}"

Faite l’essai, enclore une variable avec des double-guillemets est souvent non 
seulement plus clair et ne provoque pas une interprétation supplémentaire par 
le BASH.

En plus l’utilisation des accolades est aussi un moyen d’éviter les ambiguïtés :
        ${A}B
n’est pas forcément la même chose que :
        ${AB}
ou      $AB



> Le 4 nov. 2021 à 02:49, [email protected] a écrit :
> 
> Bonjour,
> 
> Dans un script (bash 5.0.3(1), debian 10), je tente de récupérer le résultat 
> d'une commande sed dans une variable.
> 
>   DOMAIN=http://toto.com/
>   sed '/^abc\|^$/! { p; s|^|  -> '$DOMAIN'|g }'  mon_fichier
> 
> Dans la commande, le séparateur de la substitution est | car avec / il y a un 
> conflit avec le / de la cariable DOMAIN
> 
> J'ai tenté diverses expressions, comme par exemple dans une variable :
>   RES=$(sed '/^abc\|^$/! { p; s|^|  -> '$DOMAIN'|g }')
> 
> ou en écrivant dans un fichier, avec une subsitution de commande ou sans :
>   $(sed '/^abc\|^$/! { p; s|^|  -> '"$DOMAIN"'|g }' "$RES" > mon_fichier)
> 
> ou sans :
>   $(sed '/^abc\|^$/! { p; s|^|  -> '"$DOMAIN"'|g }' "$RES" > mon_fichier)
> 
> 
> Dans le script, je n'arrive pas du tout à obtenir le résultat escompté, tant 
> via la variable que par le fichier : RIEN, même pas le résultat aplati/sans 
> séparateur  que j'obtiens en ligne de commande ci-dessous.
> 
> 
> En ligne de commande, j'obtiens exactement le résultat escompté sur stdout ou 
> dans le fichier.
>   foo
>   bar
>   baz
>   truc
>   machin
> 
> TOUTEFOIS, il y a un indice pour la question posée. Quand je fais :
>   echo $RES
> 
> J'obtiens le résultat aplati, sans séparateur :
>   foo bar baz truc machin
> 
> 
> J'ai écumé de nombreux forums où ce problème est soulevé. Sans trouver la 
> clef.
> 
> J'ai tenté de prende une valeur de DOMAIN sans / pour une expression de sed 
> avec des / au  lieu de | : idem.
> 
> Quel mystère y a-t-il qui m'échapperait donc ?
> Je me dis qu'il y a une option de sed qui m'échappe ou une obscure histoire 
> de contexte bash.
> 
> 
> Merci pour vos lumières/bougies/loupiotes !
> 
> Cordialement
> Roger

--
Pierre Malard

  « On ne peut pas pousser à fond l'éducation politique et l'éducation
    tout court de masses sans l'accompagner d'un développement
    économique, culturel et social parallèle. »
                                                   Romain Gary - "Les racines 
du ciel"
   |\      _,,,---,,_
   /,`.-'`'    -.  ;-;;,_
  |,4-  ) )-,_. ,\ (  `'-'
 '---''(_/--'  `-'\_)   πr

perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-.  ;-;;,_:  |,A-  ) )-,_. ,\ 
(  `'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"'  `-'"'"'\_): 
24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print'
- --> Ce message n’engage que son auteur <--

Attachment: signature.asc
Description: Message signed with OpenPGP

Répondre à