[Top][All Lists]

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

Re: General Associative Array problem -- Was: UUID as Array Keys strange

From: Robert White
Subject: Re: General Associative Array problem -- Was: UUID as Array Keys strangely not possible
Date: Sat, 23 Feb 2019 01:48:08 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1

On 2/22/19 4:17 PM, Eduardo Bustamante wrote:
On Fri, Feb 22, 2019 at 3:24 AM Robert White <address@hidden> wrote:
tail --lines=+3 /proc/partitions | grep -v ram |
while read -a RECORD
      eval EEEE[${INLINE[UUID]}]=boo

echo "EEEE Keys: " "address@hidden" = "address@hidden"
echo "FFFF Keys: " "address@hidden" = "address@hidden"
echo "GGGG Keys: " "address@hidden" = "address@hidden"

The `while' loop executes in a subshell and you're not using
`lastpipe'. See: https://mywiki.wooledge.org/BashFAQ/024

As a general recommendation: when submitting bug reports, try to
simplify things as much as possible, e.g.:

* Replace the `blkid' command invokation with a `printf' (not everyone
has the same block devices, nor runs Linux)
* Replace `/proc/partitions' with a copy of its contents (again, not
everyone has the same files in their systems, makes it impossible to
reproduce what you're experiencing)
* Remove the FFFF and GGGG arrays, we only need a sample case to
understand what's going on, not three
* Remove the sed commands, you're going to be using static values
(`printf') anyways
* Does the `set -f' at the top of the file have any effect in the
outcome in this particular case? no? then remove it
* I think you get the idea.

Just to help you understand my perspective, this is what I see when I
try to troubleshoot your script (a bunch of errors), that doesn't
really help me help you:

address@hidden:~$ shellcheck foo.sh

In foo.sh line 12:
function testfunc() {
^-- SC1009: The mentioned syntax error was in this function.
                     ^-- SC1073: Couldn't parse this brace group. Fix
to allow more checks.

In foo.sh line 13:
    eval INFUNC=( $( blkid /dev/${RECORD[3]} -o export | sed -e 's;\\
                ^-- SC1036: '(' is invalid here. Did you forget to escape it?
                ^-- SC1056: Expected a '}'. If you have one, try a ; or
\n in front of it.
                ^-- SC1072: Missing '}'. Fix any mentioned problems and
try again.
                ^-- SC1098: Quote/escape special characters when using
eval, e.g. eval "a=(b)".

Your syntax checker is straight tripping on that SC1036 error dude. Array assignment using ARRAYNAME=( expression ) is completely legal and correct with or without the eval. The structure even allows for line continuation just like pipelines


Same for the error emitted for using the "function" keyord

function somename() {

It does look like it got line-wrapped to death in the sed, but according to my sent items directory that happened after it left here. So my bad for lack of attachment.

I get your point for blkid and /proc/partitions. I was getting frustrated since I'd tried all three forms of substitution I didn't know if the function calls, the evaluation order, or the expansions were to blame so I included all three contexts.

Turns out I've been doing the pipe-while-read thing blithely for a good twenty years now (going back to the borne shell on SVR4) and never thought about the pipeline itself.

So I was right, for stupid definitions of right, when I wondered if I was missing something incredibly obvious. /sigh. 8-)

Thanks for all the help.


reply via email to

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