Can someone please tell me why it is splitting my value into two array elements upon appending to a new array?
Here is my code, with output below...
#!/bin/bash
IFS=$'\r\n' GLOBIGNORE='*' command eval 'toexec=($(cat /root/devops/commands.txt))'
#printf '%s\n' "${toexec[@]}"
dirlist=(`ls /root/devops/files/*`)
toCompress=()
toOutput=()
for fileList in ${dirlist[*]}
do
toOutput =($(basename ${fileList}));
toCompress =("${fileList}"$'\n');
done
newOut=()
printf '%s\n' "${toexec[@]}"
for (( i=0; i<${#toexec[@]}; i ));
do
newval="${toexec[$i]},${toOutput[$i]}"$'\n';
newOut =($newval);
done
echo "======"
printf '%s\n' "${newOut[@]}"
Here is the output, separated by =====, existing array on top, new array on bottom.
As you can see, it is putting each element into two elements, splitting on the single space between gzip and its option,filename, for example gzip and -1,a.txt.
OUTPUT
gzip -1
gzip -9
======
gzip
-1,a.txt
gzip
-9,b.txt
...
==debug additional info==
--toexec < commands.txt--
gzip -1
gzip -9
=========================
--toCompress < ls--------
=========================
/root/devops/files/a.txt
/root/devops/files/b.txt
----toOutput-------------
a.txt
b.txt
=========================
----newOut---------------
gzip
-1,a.txt
gzip
-9,b.txt
=========================
CodePudding user response:
Because the value is not double quoted, as in
newOut =("$newval")
That would add a single element to the array.
