[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: command substitution subshell exits when assigning to readonly varia
From: |
alex xmb sw ratchev |
Subject: |
Re: command substitution subshell exits when assigning to readonly variable |
Date: |
Wed, 18 Oct 2023 17:20:32 +0200 |
On Wed, Oct 18, 2023, 00:39 Philippe Cerfon <philcerf@gmail.com> wrote:
> Dear list.
>
> When I have a script like:
> echo 1
> V="$(
> echo a >&2
> false
> echo b >&2
> )"
> echo 2
>
> I get:
> 1
> a
> b
> 2
> when executing or sourcing it.
>
>
> But when I have:
> readonly R=.
>
> echo 1
> V="$(
> echo a >&2
> R=
> echo b >&2
> )"
> echo 2
>
> I get:
> 1
> a
> b.sh: line 9: R: readonly variable
> 2
> when executing it, and something similar when sourcing it.
>
>
> set -e is not used. And something like R= || true doesn't help either.
>
>
> This does not seem to happen, when outside a command substitution:
> readonly R=.
>
> echo 1
> R=
> echo 2
>
> gives:
> 1
> bash: R: readonly variable
> 2
> regardless of whether executed or sourced.
>
>
> Also:
> R= 2> /dev/null
> doesn't do what one might hope it would. I assume this is because the
> redirection happens after the assignment?
> So the only thing one could do is exec 2> /dev/null before?
>
another way follows
( a=1 ; readonly b=2 c=( 3 ) ; declare -p a b c ; for t in a b c ; do v=(
$( declare -p "$t" ) ) p=${v[1]: -1} ; if [[ $p == r ]] ; then printf 'plz
dont try to set already readonly var\n' ; else printf 'go ahead and
%s=_wanted_content\n' "$t" ; fi ; done )
declare -- a="1"
declare -r b="2"
declare -ar c=([0]="3")
go ahead and a=_wanted_content
plz dont try to set already readonly var
plz dont try to set already readonly var
Regards,
> Philippe.
>
>