bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: null array[*] expansion not treated as null


From: L A Walsh
Subject: Re: null array[*] expansion not treated as null
Date: Sun, 25 Nov 2018 12:02:41 -0800
User-agent: Thunderbird


On 11/12/2018 1:32 PM, Grisha Levit wrote:
When an array A has non-zero elements but the expansion of "${A[*]}" is
still
a null string, it is not treated as such for purposes of ${var:-X} expansion
(though $* is treated as null in the same circumstance).

    $ A=(''); set -- ''
    $ echo "<${A[*]:-X}>" "<${*:-X}>"
    <> <X>
----
   Ah, a null string != empty.  Example:
 A=()
 declare -p A
declare -a A=()
 A=('')                #null string
 declare -p A
declare -a A=([0]="")    #a string is still a string, even if empty

Related:

FWIW, below, "IFS=" sets IFS to an empty string, like
IFS=''
    $ IFS=
    $ A=('' ''); set -- '' '';
Typing in lines to echo the size of A and shell params:

 echo "=$#"   ; echo number of parameters set by "set - '' ''"
=2
 echo "size of A=${#A[@]}"
size of A=2

    $ echo "<${A[*]:-X}>" "<${*:-X}>"
    <> <X>
---
   Going to use "«»" instead of "<>" cuz <> are shell chars that
need quoting (  otherwise: bash: syntax error near unexpected token `<'  ).

First, your echo:

echo "«${A[*]:-X}»" "«${*:-X}»"
«» «X»            (#same)

and w/o the quotes:
 echo «${A[*]:-X}» «${*:-X}»
« » « »

---
Notice adding quotes around your vars can change what is
echo'ed.  Looks like the output-separator ' ' (space) is
embedded in the '*'s of both expressions, but [*] undergoes
expansion, while the 2nd one doesn't.

So 1 hint to remember a variable is an internally quoted entity, such
if it is assigned to another var, it will be assigned "as-is", but
if you put double-quotes around a variable, it will replace sequences
of white space with 1 white space.

Does that address your examples' behaviors?

of some sort where '*'«»



reply via email to

[Prev in Thread] Current Thread [Next in Thread]