Yeah, oddly, there's no straightforward way to get an unaltered file into a shell variable. Even read -rd '' < file trims off trailing newlines.
In my situation that would be welcome, tho on principle I do wish the culture was: 'If I want something done to my data I'll ask for it'.
I'm expecting Roman or someone to point out a different trick I've forgotten.
Roman would know. I have my utility working quite well, where the input isn't an array it's very simple:
% varis variable
Without the dollar sign. It evals it internally *after* capturing the name. You put the utility inside some function to trace variable values, it prints out like:
function test1 ()
{
local my_variable="Shall I compare thee to a summer\'s day?"
varis my_variable "some comment"
}
0 /aWorking/Zsh/Source/Wk 1 % . test1; test1
...
test1():4 in: test1:6 > "$my_variable" is: |Shall I compare thee to a summer's day?| some comment - 18:33:06
... It reports name of function, logical line, running file, physical line, name of variable, content, some comment if present and the time. I love it. Anyway, it was all good except that arrays print on multiple lines if requested and they were not showing any blank lines, which I object to on principle -- so I'm trying to fix that. It's 99% there:
0 /aWorking/Zsh/Source/Wk 1 % print -l "$vvar[@]" # What it really looks like.
one two
three
four
five six seven
eight
0 /aWorking/Zsh/Source/Wk 1 % varis ,m vvar ! this is comment # squashed array, usually fine but ...
zsh():15 in: zsh:15 > "$vvar" is:
zsh():16 in: zsh:16 > RAW:
one two
three
four
five six seven
eight
! this is comment - 18:41:06
0 /aWorking/Zsh/Source/Wk 1 % varis ,m "${(@f)vvar}" ! this is comment # ... when I'm determined to see the blanks:
one two
three
four
five six seven
eight
this is comment - 18:41:13
... as discussed I have to twist the shell's arm to get my file
into a variable as it actually is. In practice it's not a big
deal but on principle it would be nice to avoid " "${(@f) var}"
"
This sure looks good:
0 /aWorking/Zsh/Source/Wk 0 % read -rd '' < testfile2 aaa
0 /aWorking/Zsh/Source/Wk 0 % print -l $aaa # Sheesh, it's so simple here.
one two
three
four
five six seven
eight