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 <--
signature.asc
Description: Message signed with OpenPGP

